您的位置:首页 > 其它

爬虫如何抓取网页的动态加载数据-ajax加载

2021-03-01 22:21 176 查看

本文讲的是不使用selenium插件模拟浏览器,如何获得网页上的动态加载数据。步骤如下: 一、找到正确的URL。二、填写URL对应的参数。三、参数转化为urllib可识别的字符串data。四、初始化Request对象。五、urlopen这个Request对象,获得数据。


















url='http://www.*****.*****/*********'

formdata = {'year': year,

'month': month,

'day': day

}

data = urllib.urlencode(formdata)

request=urllib2.Request(url,data = data)  #如果URL不带参数就是request=urllib2.Request(url)

r = urllib2.urlopen(request)

html=r.read() # html就是你要的数据,可能是html格式,也可能是json,或去他格式

后面步骤都是相同的,关键在于如何获得URL和参数。我们以新冠肺炎的疫情统计网页为例(https://news.qq.com/zt2020/page/feiyan.htm#/)。

如果直接抓浏览器的网址,你会看见一个没有数据内容的html,里面只有标题、栏目名称之类的,没有累计确诊、累计死亡等等的数据。因为这个页面的数据是动态加载上去的,不是静态的html页面。需要按照我上面写的步骤来获取数据,关键是获得URL和对应参数formdata。下面以火狐浏览器讲讲如何获得这两个数据。

肺炎页面右键,出现的菜单选择检查元素。

点击上图红色箭头网络选项,然后刷新页面。如下,

这里会出现很多网络传输记录,观察最右侧红框“大小”那列,这列表示这个http请求传输的数据量大小,动态加载的数据一般数据量会比其它页面元素的传输大,119kb相比其它按字节计算的算是很大的数据了,当然网页的装饰图片有的也很大,这个需要按照文件类型那列来甄别。

然后点击域名列对应那行,如下


可以在消息头中看见请求网址,这个就是url,点击参数可以看见url对应的参数


https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5&callback=jQuery341004532487105727312_1584498763134&_=1584498763135

可以看到url的尾部?后面已经把参数写上了。

我们如果使用带参数的URL,那么就

request=urllib2.Request(url),不加data参数。

如果使用request=urllib2.Request(url,data = data)

那么url="https://view.inews.qq.com/g2/getOnsInfo"

formdata = {'name': 'disease_h5',

'callback': '',

'_': 当前时间戳

}

name是disease_h5,callback是页面回调函数,我们不需要有回调动作,所以设置为空,_对应的是时间戳(Python很容易获得时间戳的),因为查询肺炎患者数量和时间是紧密相关的。

如果都写在一个url中是下面形式的

url='https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5&callback=&_=%d'%int(stamp*1000)

按照这个思路就可以获得疫情数据了。两种方案任你选择。

找url和参数是一项需要耐心,需要一定的分析能力的,才能正确甄别url和参数的含义,进行正确的编程实现。参数是否可以空,是否可以硬编码写死,是否有特殊要求,其实是一个很考验经验的事情。

有的url很简单,返回一个.dat文件,里面直接就是json格式的数据,这种是最友好的了。有的需要你设置大量参数,才能获得,而且获得的是html格式的,需要解析才能提取数据。解析部分请参考我之前写的BeautifulSoup解析html


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: