目标网站:https://quote.eastmoney.com/center/gridlist.html#hs_a_board
需求:将东方财富网行情中心不同板块的股票数据爬取下来
目标是将各个选项卡的股票数据全部爬取并以excel文件保存在本地。
查看网页源代码发现并没有目标数据,因此需要对网页进行抓包分析,查看哪个文件里包含目标数据,打开开发者模式(F12),找到目标文件
首先查看url,获取沪京深A股的第一页数据
# 沪深京A股
url = "https://62.push2.eastmoney.com/api/qt/clist/get?cb=jQuery1124007675389012158473_1703949729655&pn=1&pz=20&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&wbp2u=|0|0|0|web&fid=f3&fs=m:0+t:6,m:0+t:80,m:1+t:2,m:1+t:23,m:0+t:81+s:2048&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152&_=1703949729656"
访问形式为GET
查看预览,发现需要爬取的数据在文件的‘data’中的’diff’里面,对应的文件数据如下图所示:
通过观察发现,该数据无法直接转换成json文件,需要删除上图中的红框内容,需要用正则表达式替换成空字符串
data = response.text
# 找到开头到第一个'('的部分
left_data = re.search(r'^.*?(?=()', data).group()
# 将匹配到的内容加上'('替换成空字符串
data = re.sub(left_data + '(', '', data)
# 将结尾的');'替换成空字符串
data = re.sub(');', '', data)
# 用eval将data转换成字典
data = eval(data)
注意:这里在匹配开头内容时,如果使用下面的语句直接匹配到’jQuery1124007675389012158473_1703949729655('再进行替换的话会出现错误
left_data = re.search(r'^.*?(', data).group()
print(left_data)
data = re.sub(left_data, '', data)