相信投行從業(yè)人員經(jīng)常要做的一件事幕随,是要下載證監(jiān)會(huì)的反饋意見(jiàn),把它們收集起來(lái)冯事,形成自己的數(shù)據(jù)庫(kù)焦匈。在這里,筆者運(yùn)用Python對(duì)網(wǎng)頁(yè)進(jìn)行爬蟲昵仅,可批量下載證監(jiān)會(huì)反饋意見(jiàn)缓熟,可大大減輕工作量。
本文目錄:
1岩饼、觀察網(wǎng)頁(yè)
2荚虚、 下載第一頁(yè)的反饋意見(jiàn)
3薛夜、通過(guò)循環(huán)籍茧,下載證監(jiān)會(huì)所有的反饋意見(jiàn)
1、觀察網(wǎng)頁(yè)
我們?cè)诠雀铻g覽器右鍵點(diǎn)擊“檢查”,點(diǎn)擊“Network”梯澜,刷新頁(yè)面寞冯。我們點(diǎn)擊第一條名為“scgkfxfkyj”的鏈接,點(diǎn)擊“Response”晚伙,發(fā)現(xiàn)了我們需要的反饋意見(jiàn)在這里可以找到吮龄,說(shuō)明我們只需要請(qǐng)求和解析靜態(tài)網(wǎng)頁(yè)即可。
2咆疗、 下載第一頁(yè)的反饋意見(jiàn)
(1)先調(diào)用本次要使用的第三方庫(kù)
import re
from lxml import etree
import requests
(2)采用requests庫(kù)請(qǐng)求數(shù)據(jù)
我們查看“Headers”發(fā)現(xiàn)請(qǐng)求方法為get請(qǐng)求漓帚,請(qǐng)求url和請(qǐng)求方法如下圖所示:
請(qǐng)求數(shù)據(jù)代碼如下:
url='http://www.csrc.gov.cn/pub/newsite/fxjgb/scgkfxfkyj/'
r=requests.get(url)
r.encoding=r.apparent_encoding
(3)采用Xpath解析數(shù)據(jù)
我們查看“Elements”,發(fā)現(xiàn)頁(yè)面所有的反饋意見(jiàn)都在class=”fl_list”的的div標(biāo)簽下午磁,每一個(gè)反饋意見(jiàn)則在該div標(biāo)簽下的li標(biāo)簽下尝抖,li標(biāo)簽下有網(wǎng)頁(yè)鏈接、名字和發(fā)布時(shí)間等數(shù)據(jù)迅皇。
獲取每個(gè)反饋意見(jiàn)所在網(wǎng)址后昧辽,我們發(fā)現(xiàn),我們下載文件的鏈接存在這個(gè)網(wǎng)址里登颓,經(jīng)過(guò)對(duì)這個(gè)網(wǎng)址進(jìn)行分析搅荞,我們發(fā)現(xiàn)網(wǎng)址由兩部分內(nèi)容拼接而成:
頭部:反饋意見(jiàn)所在網(wǎng)址的前半段;尾部:<a>標(biāo)簽的href屬性;
我們采用正則表達(dá)式將文件所在網(wǎng)址提取出來(lái)咕痛。
下載第一頁(yè)反饋意見(jiàn)代碼如下:
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')#會(huì)把所有的li標(biāo)簽提取出來(lái)
for li in li_list:
href=li.xpath('./a/@href')[0][2:]#獲取反饋意見(jiàn)所在網(wǎng)址的后綴
url=baseurl+href#獲取反饋意見(jiàn)所在網(wǎng)址
date=li.xpath('./span/text()')[0]#獲取反饋意見(jiàn)發(fā)布時(shí)間
r=requests.get(url)#請(qǐng)求反饋意見(jiàn)網(wǎng)址數(shù)據(jù)
r.encoding=r.apparent_encoding
url_href=re.findall('a href="./(.*?.docx?)"',r.text)[0]
name=re.findall('h12>(.*?.docx?)</a>',r.text)[0]#獲取反饋意見(jiàn)文件名字
name=date+name#給反饋意見(jiàn)文件名字加上發(fā)布時(shí)間
url_head=re.findall('(.*)/.*?.html',url)[0]
new_url=url_head+'/'+url_href#獲取反饋意見(jiàn)文件網(wǎng)址
r=requests.get(new_url)
with open('C:\\Users\\mi\\Desktop\\證監(jiān)會(huì)反饋意見(jiàn)\\首發(fā)反饋意見(jiàn)2\\'+name,'wb') as f:
f.write(r.content)
3痢甘、通過(guò)循環(huán),下載證監(jiān)會(huì)所有的反饋意見(jiàn)
我們發(fā)現(xiàn)不同頁(yè)碼的網(wǎng)址如下:
第1頁(yè):
http://www.csrc.gov.cn/pub/newsite/fxjgb/scgkfxfkyj
第2頁(yè):
http://www.csrc.gov.cn/pub/newsite/fxjgb/scgkfxfkyj/index_1.html
第3頁(yè):
http://www.csrc.gov.cn/pub/newsite/fxjgb/scgkfxfkyj/index_2.html
第25頁(yè)(最后一頁(yè)):
http://www.csrc.gov.cn/pub/newsite/fxjgb/scgkfxfkyj/index_24.html
發(fā)現(xiàn)第2頁(yè)后規(guī)律一致茉贡,第1頁(yè)和后面網(wǎng)頁(yè)不太一樣产阱,我們嘗試把第1頁(yè)的網(wǎng)址改成:http://www.csrc.gov.cn/pub/newsite/fxjgb/scgkfxfkyj/index_0.html
發(fā)現(xiàn)無(wú)法訪問(wèn),也就是第一頁(yè)就是不一樣块仆。
我們可以將所有url放入列表构蹬,需要用的時(shí)候循環(huán)取出去請(qǐng)求就行了,需要請(qǐng)求單獨(dú)某一頁(yè)就直接通過(guò)索引取出悔据。
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)
設(shè)置完成url列表后庄敛,我們通過(guò)for循環(huán)完成證監(jiān)會(huì)所有反饋意見(jiàn)的下載。全套代碼如下:
import re
from lxml import etree
import requests
savingpath='C:\\Users\\chenwei\\Desktop\\證監(jiān)會(huì)反饋意見(jiàn)\\首發(fā)反饋意見(jiàn)2'#設(shè)置反饋意見(jiàn)存放文件夾
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')#會(huì)把所有的li標(biāo)簽提取出來(lái)
for li in li_list:
href=li.xpath('./a/@href')[0][2:]#獲取反饋意見(jiàn)所在網(wǎng)址的后綴
url=baseurl+href#獲取反饋意見(jiàn)所在網(wǎng)址
date=li.xpath('./span/text()')[0]#獲取反饋意見(jiàn)發(fā)布時(shí)間
r=requests.get(url)#請(qǐng)求反饋意見(jiàn)網(wǎng)址數(shù)據(jù)
r.encoding=r.apparent_encoding
if re.search('a href="./.*?.docx?"',r.text):#經(jīng)分析網(wǎng)頁(yè)發(fā)現(xiàn)有些文件是doc/docx格式的科汗,有些是wps格式的
url_href=re.findall('a href="./(.*?.docx?)"',r.text)[0]
name=re.findall('h12>(.*?.docx?)</a>',r.text)[0]#獲取反饋意見(jiàn)文件名字
else:
url_href=re.findall('a href="./(.*?.wps)"',r.text)[0]
name=re.findall('h12>(.*?.wps)</a>',r.text)[0]#獲取反饋意見(jiàn)文件名字
name=date+name#給反饋意見(jiàn)文件名字加上發(fā)布時(shí)間
url_head=re.findall('(.*)/.*?.html',url)[0]
new_url=url_head+'/'+url_href#獲取反饋意見(jiàn)文件網(wǎng)址
r=requests.get(new_url)
filepath=savingpath+'\\'+name
with open(filepath,'wb') as f:
f.write(r.content)
最后運(yùn)行結(jié)果如下:
今天的分享到此為止啦藻烤,以上代碼是批量下載首次公開發(fā)行反饋意見(jiàn)回復(fù),下載再融資及并購(gòu)重組反饋意見(jiàn)回復(fù)只需要把url參數(shù)修改即可头滔。