目前,我國滬深A股上市公司的數量為3524家[2018/05/31],如果能夠從某個財經網站上批量獲取這些公司的基本信息,將對研究工作起到一定幫助。進行這項工作之前,先讓我們梳理一下我們的數據及其來源。
第一,我們需要哪些公司基本信息?
根據巨潮資訊網提供的數據,公司基本信息包含公司全稱、英文名稱、注冊地址、公司簡稱、法定代表人、公司董秘、注冊資本(萬元)、行業種類、郵政編碼、公司電話、公司傳真、公司網址、上市時間、招股時間、發行數量(萬股)、發行價格(元)、發行市盈率(倍)、發行方式、主承銷商、上市推薦人和保薦機構,共21條信息。
我們的目標就是批量獲取這21條或者其中我們需要的那些數據。
第二,數據來源是什么?
之前,試過從天眼查爬取數據,但是天眼查的反爬機制確實讓人頭疼。個人感覺巨潮資訊網的網站結構還是比較規范的,並且這個網站沒有tyc-num之類的反爬,這樣就給工作節省了一大筆時間。
數據來源就是巨潮資訊網。
第三,怎么實現獲取?
我們的目標和來源都已經明確,接下來就是獲取問題了。這也是功能的關鍵部分。首先,明確程序的功能特點,即輸入股票代碼(1個或者多個),批量獲取這些公司基本信息。其次,輸入的股票代碼,可以是自己的目標公司,也可以是分行業、分概念、分地域等(演示代碼中使用tushare調取了滬深全部A股上市公司)。再次,批量抓取公司基本信息,這里就涉及到python爬蟲的部分。爬蟲的部分,基本思路是用tushare獲取股票代碼,依次獲取包含公司信息的網頁鏈接,用requests獲取網頁源碼,用bs4解析網頁結構,從中找到所需信息,然后打印或者保存。
總結起來,這里用的了tushare,requests,bs4,等基本內容。演示代碼中直接在窗口中打印信息,也可以嘗試將信息保存在excel,csv等文件中。
接下來就是代碼部分。代碼中有不完善之處,感謝批評指正。
#-*-coding:gb2312-*- from bs4 import BeautifulSoup import requests import bs4 import tushare as ts #獲取源碼 def check_link(url): try: r = requests.get(url) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: print('無法鏈接服務器!') #解析並抓取 '''
print 部分,獲取了9條信息,改變這部分參數,可以獲取一共21條信息。
''' def get_contents(ulist,rurl): soup = BeautifulSoup(rurl,'lxml') trs = soup.find_all('tr') for tr in trs: ui = [] for td in tr: ui.append(td.string) ulist.append(ui) print(ulist[1][3],ulist[3][3],ulist[5][3],ulist[7][3],ulist[8][3],ulist[13][3],ulist[15][3],ulist[16][3],ulist[17][3])
#定義主函數 def main(): df = ts.get_stock_basics() for i in df.index: index_int = int(i) urli = [] url = "http://www.cninfo.com.cn/information/brief/shmb%d.html"%index_int try: rs = check_link(url) get_contents(urli,rs) continue except: pass main()