相信投行从业人员经常要做的一件事,是要下载证监会的反馈意见,把它们收集起来,形成自己的数据库。在这里,笔者运用Python对网页进行爬虫,可批量下载证监会反馈意见,可大大减轻工作量。
本文目录:
1、观察网页
2、 下载第一页的反馈意见
3、通过循环,下载证监会所有的反馈意见
1、观察网页
我们在谷歌浏览器右键点击“检查”,点击“Network”,刷新页面。我们点击第一条名为“scgkfxfkyj”的链接,点击“Response”,发现了我们需要的反馈意见在这里可以找到,说明我们只需要请求和解析静态网页即可。
2、 下载第一页的反馈意见
(1)先调用本次要使用的第三方库
import re
from lxml import etree
import requests
(2)采用requests库请求数据
我们查看“Headers”发现请求方法为get请求,请求url和请求方法如下图所示:
请求数据代码如下:
url='http://www.csrc.gov.cn/pub/newsite/fxjgb/scgkfxfkyj/'
r=requests.get(url)
r.encoding=r.apparent_encoding
(3)采用Xpath解析数据
我们查看“Elements”,发现页面所有的反馈意见都在class=”fl_list”的的div标签下,每一个反馈意见则在该div标签下的li标签下,li标签下有网页链接、名字和发布时间等数据。
获取每个反馈意见所在网址后,我们发现,我们下载文件的链接存在这个网址里,经过对这个网址进行分析,我们发现网址由两部分内容拼接而成:
头部:反馈意见所在网址的前半段;尾部:<a>标签的href属性;
我们采用正则表达式将文件所在网址提取出来。
下载第一页反馈意见代码如下:
baseurl='http://www.csrc.gov.cn/pub/newsite/fxjgb/scgkfxfkyj/'
r=requests.get(baseurl)
r.encoding=r.apparent_encoding
tree=etree.HTML(r.text)
li_list=tree.xpath('/html/body/div/div/div[5]/div[2]/div[1]/div[2]/ul/li')#会把所有的li标签提取出来
for li in li_list:
href=li.xpath('./a/@href')[0][2:]#获取反馈意见所在网址的后缀
url=baseurl+href#获取反馈意见所在网址
date=li.xpath('./span/text()')[0]#获取反馈意见发布时间
r=requests.get(url)#请求反馈意见网址数据
r.encoding=r.apparent_encoding
url_href=re.findall('a href="./(.*?.docx?)"',r.text)[0]
name=re.findall('h12>(.*?.docx?)</a>',r.text)[0]#获取反馈意见文件名字
name=date+name#给反馈意见文件名字加上发布时间
url_head=re.findall('(.*)/.*?.html',url)[0]
new_url=url_head+'/'+url_href#获取反馈意见文件网址
r=requests.get(new_url)
with open('C:\\Users\\mi\\Desktop\\证监会反馈意见\\首发反馈意见2\\'+name,'wb') as f:
f.write(r.content)
3、通过循环,下载证监会所有的反馈意见
我们发现不同页码的网址如下:
第1页:
http://www.csrc.gov.cn/pub/newsite/fxjgb/scgkfxfkyj
第2页:
http://www.csrc.gov.cn/pub/newsite/fxjgb/scgkfxfkyj/index_1.html
第3页:
http://www.csrc.gov.cn/pub/newsite/fxjgb/scgkfxfkyj/index_2.html
第25页(最后一页):
http://www.csrc.gov.cn/pub/newsite/fxjgb/scgkfxfkyj/index_24.html
发现第2页后规律一致,第1页和后面网页不太一样,我们尝试把第1页的网址改成:http://www.csrc.gov.cn/pub/newsite/fxjgb/scgkfxfkyj/index_0.html
发现无法访问,也就是第一页就是不一样。
我们可以将所有url放入列表,需要用的时候循环取出去请求就行了,需要请求单独某一页就直接通过索引取出。
urls=[]
baseurl='http://www.csrc.gov.cn/pub/newsite/fxjgb/scgkfxfkyj/'
urls.append(baseurl)
for i in range(1,25):
url=f'http://www.csrc.gov.cn/pub/newsite/fxjgb/scgkfxfkyj/index_{i}.html'
urls.append(url)
设置完成url列表后,我们通过for循环完成证监会所有反馈意见的下载。全套代码如下:
import re
from lxml import etree
import requests
savingpath='C:\\Users\\chenwei\\Desktop\\证监会反馈意见\\首发反馈意见2'#设置反馈意见存放文件夹
urls=[]
baseurl='http://www.csrc.gov.cn/pub/newsite/fxjgb/scgkfxfkyj/'
urls.append(baseurl)
for i in range(1,25):
url=f'http://www.csrc.gov.cn/pub/newsite/fxjgb/scgkfxfkyj/index_{i}.html'
urls.append(url)
for url in urls:
r=requests.get(url)
r.encoding=r.apparent_encoding
tree=etree.HTML(r.text)
li_list=tree.xpath('/html/body/div/div/div[5]/div[2]/div[1]/div[2]/ul/li')#会把所有的li标签提取出来
for li in li_list:
href=li.xpath('./a/@href')[0][2:]#获取反馈意见所在网址的后缀
url=baseurl+href#获取反馈意见所在网址
date=li.xpath('./span/text()')[0]#获取反馈意见发布时间
r=requests.get(url)#请求反馈意见网址数据
r.encoding=r.apparent_encoding
if re.search('a href="./.*?.docx?"',r.text):#经分析网页发现有些文件是doc/docx格式的,有些是wps格式的
url_href=re.findall('a href="./(.*?.docx?)"',r.text)[0]
name=re.findall('h12>(.*?.docx?)</a>',r.text)[0]#获取反馈意见文件名字
else:
url_href=re.findall('a href="./(.*?.wps)"',r.text)[0]
name=re.findall('h12>(.*?.wps)</a>',r.text)[0]#获取反馈意见文件名字
name=date+name#给反馈意见文件名字加上发布时间
url_head=re.findall('(.*)/.*?.html',url)[0]
new_url=url_head+'/'+url_href#获取反馈意见文件网址
r=requests.get(new_url)
filepath=savingpath+'\\'+name
with open(filepath,'wb') as f:
f.write(r.content)
最后运行结果如下:
今天的分享到此为止啦,以上代码是批量下载首次公开发行反馈意见回复,下载再融资及并购重组反馈意见回复只需要把url参数修改即可。