python利用pandas直接爬取表格類資料
阿新 • • 發佈:2018-12-21
table型的表格可以直接利用pandas的read_html一句話抓取,而不需依賴requests等爬蟲庫
嘗試爬取A股上市公司資料,參照了上面的文章,並做了一些改進。
針對原文pandas爬取的程式碼有幾個問題:
1、預設保留了所有頁的標題列,這樣爬取完之後出現大量的標題重複行
2、深交所上市的股票程式碼為000開頭,在read_html讀取過程中便預設去掉了0的字首
3、178頁的資料用for迴圈爬取依舊緩慢,考慮引入程序池
第二個問題是在read_html的過程中就捨棄了字首0,目前沒有找到對應的修改引數,最終只能嘗試在excel中用公式解決
選擇股票程式碼一列,右鍵-設定單元格格式-數字-自定義,輸入000000即可。
改進過後的輸入如下,只需幾秒鐘即可抓取全部178頁資料。
附程式碼:
import pandas as pd import csv from multiprocessing import Pool import time def getdata(url): tb = pd.read_html(url)[3] #經觀察發現所需表格是網頁中第4個表格,故為[3] tb.to_csv(r'E:\stock.csv', mode='a', encoding='utf_8_sig', header=0, index=0) time.sleep(0.5) #print('第'+str(i)+'頁抓取完成') #引入程序池 def myprocesspool(num=10): pool = Pool(num) results = pool.map(getdata,urls) pool.close() pool.join() return results if __name__=='__main__': urls=[] for i in range(1,179): # 爬取全部178頁資料 tmp = 'http://s.askci.com/stock/a/?reportTime=2017-12-31&pageNum=%s' % (str(i)) urls.append(tmp) #預先輸入好表格的列名 with open(r'E:\stock.csv', 'w', encoding='utf-8-sig', newline='') as f: csv.writer(f).writerow(['序號', '股票程式碼', '股票簡稱', '公司名稱', '省份', '城市' , '主營業務收入','淨利潤','員工人數','上市日期','招股書','財報','行業分類','產品型別','主營業務']) myprocesspool(10)