import logging
import os
import time
import requests
import pandas as pd
from concurrent.futures import ThreadPoolExecutor
这篇博客(视频)记录从巨潮资讯爬取相关公告的 PDF 文件。
= pd.read_csv('./data/final.csv', dtype={'secCode':str}) data
data.head()
secCode | secName | orgId | announcementTitle | announcementTime | adjunctUrl | announcementContent | |
---|---|---|---|---|---|---|---|
0 | 002152 | 广电运通 | 9900003423 | 广电运通:2016年4月1日投资者关系活动记录表 | 2016-04-06 | http://static.cninfo.com.cn/finalpage/2016-04-... | 9、公司提过有储备区块链技术,是否可以介绍? |
1 | 002177 | 御银股份 | 9900003781 | 御银股份:2016年4月21日投资者关系活动记录表 | 2016-04-21 | http://static.cninfo.com.cn/finalpage/2016-04-... | 4、公司在区块链技术上未来有什么规划? |
2 | 300386 | 飞天诚信 | 9900023058 | 飞天诚信:2016年4月22日投资者关系活动记录表 | 2016-04-25 | http://static.cninfo.com.cn/finalpage/2016-04-... | 公司在区块链部分如何布局? |
3 | 300423 | 鲁亿通 | 9900028812 | 鲁亿通:关于本次交易前12个月内购买、出售资产的说明 | 2016-06-09 | http://static.cninfo.com.cn/finalpage/2016-06-... | 同时,上市公司拟采用定价发行的方式向纪法清、孔剑平、孙奇锋、王麒诚和中信建投-数贝泽华人工智... |
4 | 000961 | 中南建设 | gssz0000961 | 中南建设:关于本公司投资上海承泰信息科技股份有限公司的进展公告 | 2016-06-23 | http://static.cninfo.com.cn/finalpage/2016-06-... | ,以区块链技术处理玛娜花园不同版本的个人数据,形成对数据信息的安全保护。 |
4,5] data.iloc[
'http://static.cninfo.com.cn/finalpage/2016-06-23/1202387515.PDF'
def get_announcement(s, url, secName):
try:
= s.get(url)
r = str(secName) + ".pdf"
filename # 注意要用'wb', b表示二进制,不要用'w'
with open(filename, 'wb') as f:
# r.content -> requests中的二进制响应内容:以字节的方式访问请求响应体
f.write(r.content) except Exception as e:
logging.warning(secName, e)*5) time.sleep(random.random()
"announcements")
os.chdir(= data.loc[:, "adjunctUrl"]
url = data.loc[:, "secName"]
secName
with ThreadPoolExecutor(max_workers=8) as pool:
with requests.Session() as s:
= [pool.submit(get_announcement, s, url, secName) for url,secName in zip(url, secName)] futures