如何抓取网页数据(不使用selenium插件模拟浏览器如何获得网页上的动态加载数据)

优采云 发布时间: 2021-10-11 07:23

  如何抓取网页数据(不使用selenium插件模拟浏览器如何获得网页上的动态加载数据)

  本文是关于如何在不使用selenium插件模拟浏览器的情况下获取网页的动态加载数据。步骤如下: 一、找到正确的URL。二、填写URL对应的参数。三、 参数转换成urllib可以识别的字符串数据。四、 初始化请求对象。五、url打开Request对象获取数据。

  url='http://www.*****.*****/*********'<br />formdata = {'year': year,<br />'month': month,<br />'day': day<br />}<br />data = urllib.urlencode(formdata)<br />request=urllib2.Request(url,data = data)  #如果URL不带参数就是request=urllib2.Request(url)<br />r = urllib2.urlopen(request)<br />html=r.read() # html就是你要的数据,可能是html格式,也可能是json,或去他格式

  下面的步骤都是一样的,关键是如何获取URL和参数。我们以新冠肺炎疫情统计网页为例(#/)。

  

  如果直接抓取浏览器的网址,会看到一个没有数据内容的html,只有标题、列名等。没有关于累积诊断、累积死亡等的数据。因为这个页面上的数据是动态加载的,不是静态的html页面。需要按照我上面写的步骤来获取数据,关键是获取URL和对应的参数formdata。下面说一下如何用火狐浏览器获取这两个数据。

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

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

  会有大量的网络传输记录。观察最右侧红色框中的“尺寸”列。此列表示此 http 请求传输的数据量。一般动态加载的数据量比其他页面元素的传输量大,为119kb。与其他按字节计算的数据相比,数据量很大。当然,网页的一些装饰图片也是非常大的。这个需要根据文件类型栏来区分。

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

  

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

  

  你能看到网址的结尾吗?后面的参数已经写好了。

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

  request=urllib2.Request(url),不带数据参数。

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

  然后 url=""

  formdata = {'name':'disease_h5',

  '打回来':'',

  '_':当前时间戳

  }

  名称为 disease_h5,callback 为页面回调函数。我们不需要回调动作,所以设置为空,_对应时间戳(Python很容易得到时间戳),因为肺炎患者的数量与时间密切相关。

  如果是写在url中,则是如下形式

  url='%d'%int(stamp*1000)

  按照这个思路,就可以得到流行病数据。您可以在两个选项之间进行选择。

  查找网址和参数需要耐心和一定的分析能力,才能正确识别网址和参数的含义,实现正确的编程。参数是否可以为空,是否可以硬编码,是否有特殊要求,其实都是测试经验的问题。

  有些网址很简单,返回一个.dat文件,里面直接收录json格式的数据,最友好。有的需要设置大量参数才能获取,获取的都是html格式,需要解析提取数据。分析部分请参考我之前写的

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线