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

优采云 发布时间: 2022-04-08 22:13

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

  本文是关于如何在不使用 selenium 插件模拟浏览器的情况下获取网页上动态加载的数据。步骤如下: 一、找到正确的URL。二、填写URL对应的参数。三、 参数被转换成urllib 可以识别的字符串数据。四、初始化请求对象。五、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和参数。我们以新冠肺炎疫情统计网页为例(#/)。

  

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

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

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

  这里会有很多网络传输记录。观察最右边红色框中的“大小”列。此列表示此 http 请求传输的数据量。一般情况下,动态加载的数据量会大于其他页面元素的传输量。与其他按字节计算的数据相比,数据量很大。当然,有些网页的装饰图片也很大。这需要根据文件类型的栏目进行筛选。

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

  

  可以在消息头看到请求的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(戳*1000)

  这样就可以得到疫情数据。有两个选项供您选择。

  查找url和参数需要耐心和一定的分析能力,才能正确识别url和参数的含义,并实施正确的编程。参数是否可以为空,是否可以硬编码,是否有特殊要求,其实是对经验的考验。

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

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线