昨天晚上在研究百度下拉框的问题,获取到的数据就是jquery加载出来,就是下面这样的
请求地址以及Agent都好搞定,就是这个返回数据有点小麻烦。不过,在自己的琢磨下,也解决了,但是我有种感觉我这个方法并不是最好的,先分享一下吧,如果你有更好的办法,可以向我分享一下。
我主要用正则表达式从中截取的。
从获取的数据来看,有用的数据是在一对中括号内的
那么这就好办了,我就直接用正则表达式,取中括号内的内容。
规则如下:
reg='[[](.*)[]]'
之后就得到了一个含有多条字典数据的列表啦,这种数据,又不能用json.loads()方法,也就没办法直接使用。
仔细看了下,这个列表里面是多条字典数据,那要从这个列表中将这些字典数据一条条还原出来,有什么好办法呢?
我于是想到了eval()这个函数,这个可以让字符串运行的函数,可以让它恢复真身。
把处理过的数据,再用这个函数处理一下,顿时清爽了,全成字典数据
像下面这样的
这时候,我也不需要转换什么json了,已经是字典数据了,那就直接获取键值就行了呗。相信各位也都会用了。
下面,我将处理过程中的全部代码贴上来,供大家参考
# -*- coding:utf-8 -*- #! python2 import requests import re url='数据网址' header={ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)\ AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36' } reg='[[](.*)[]]' #正则表达式 r=requests.get(url,headers=header) #发送get请求 data2=re.findall(reg,r.text) #用正则表达式取数据,返回数据为列表型 #print(data2) #print(type(data2)) if data2: k=eval(data2[0]) #用eval()函数将字符串恢复真身为字典 for i in k: print(i) else: print('没有数据')
到此大功告成
有在学习python的朋友,可以多关注本站,百度搜索有货街,就可以找到我啦!
标签: