该体现程序员厉害的时候啦~
1.首先,开始分析天天基金网的一些数据。经过抓包分析,可知: ./fundcode_search.js
包含所有基金代码的数据。
2.根据基金代码,访问地址: fundgz.1234567.com.cn/js/ + 基金代码 + .js
可以获取基金实时净值和估值信息。
3.根据基金代码,访问地址: fundf10.eastmoney.com/FundArchivesDatas.aspx?type=jjcc&code= + 基金代码 + &topline=10&year=2021&month=3
可以获取第一季度该基金所持仓的股票。
4.由于这些地址具有反爬机制,多次访问将会失败的情况。所以需要搭建IP代理池,用于反爬。搭建很简单,只需要将proxy_pool这个项目跑起来就行了。
# 通过这个方法就能获取代理
def get_proxy():
return requests.get("http://127.0.0.1:5010/get/").json()
5.搭建完IP代理池后,我们开始着手多线程爬取数据的工作。使用多线程,需要考虑到数据的读写顺序问题。这里使用Python中的队列queue存储基金代码,不同线程分别从这个queue中获取基金代码,并访问指定基金的数据。因为queue的读取和写入是阻塞的,所以可确保该过程不会出现读取重复和读取丢失基金代码的情况。
# 获取所有基金代码
fund_code_list = get_fund_code()
fund_len = len(fund_code_list)
# 创建一个队列
fund_code_queue = queue.Queue(fund_len)
# 写入基金代码数据到队列
for i in range(fund_len)