项目分析
成品展示:
快速上手
废话就到这里,直接开干!
寻找接口
众所周知,爬取网页数据一般可以通过寻找网页结构规律和爬取接口两种方式,简单起见,笔者直接使用了搜索接口。
下为巨潮资讯网首页。
小手一点,年报直接出现,这是针对具体公司的年报可以直接搜索,那么该如何爬取所有的记录呢?
F12打开开发者工具,进行简单的网络抓包。
通过切换页面,发现网络上有响应,发现搜索接口。
没错,就是这段链接!
searchkey:搜索内容;pageNum:当前页码;type=shj:沪深京主板……
也可以加入参数&sdate=2015-01-01&edate=2022-01-01&来指定搜索链接。
直接get,返回一个json文件,也包含股票代码,公司名称,还有关键的下载链接!
获取数据
既然找到了json文件,那么就很好入手,直接打开pycharm。
先根据接口,写好访问参数。
然后使用request进行访问,注意程序的稳健性!爬取众多文件很容易报错,所以要做好异常机制处理,笔者做了失败重试以及多次失败后直接跳过的机制。
# 发送HTTP请求并获取响应
all_results = []
page_num =1 #设置首页
total_pages = 1 #初始化最大页面
max_retries = 2 #最大重试次数
retry_count = 0
while page_num <= total_pages:
url = url_template.format(search_key, page_num)
response = None
# 重试机制
while retry_count <= max_retries:
# 发送请求
try:
response = requests.get(url,headers=headers)
response.raise_for_status()
break
except requests.exceptions.RequestException as e:
print(f"出现错误!: {e}")
print(f"5秒后重试...")
time.sleep(5)
retry_count += 1
if retry_count > max_retries:
print(f"{max_retries} 次重试后均失败. 跳过第 {page_num}页.")
page_num += 1
retry_count = 0
continue
然后就是不断循环,将每次得到的json文件合并到all_result中
# 解析数据
try:
data = response.json()
all_results.extend(data["announcements"])
total_pages = data["totalpages"]
print(f"正在下载第 {page_num}/{total_pages}页")
page_num += 1
retry_count = 0
except (ValueError, KeyError) as e:
print(f"Error parsing response data: {e}")
print(f"5秒后重试...")
time.sleep(5)
retry_count += 1
continue
这一部是关键!json文件如果处理过程中报错,很容易前功尽弃!又需要重头开始。
经过笔者测试,该接口最大页数为2000,大于该数字必定报错,因此爬取时可以限定时间范围。
保存数据
当json文件合并好后,就是对数据的分析和保存了!
笔者使用了openpyxl库来创建excel表格。
由于json文件数据过于杂乱,因此必须做好剔除工作。
文章为作者独立观点,不代表 股票程序化软件自动交易接口观点