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