目前,我国沪深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()