java爬虫抓取动态网页(不使用selenium插件模拟浏览器如何获得网页上的动态加载数据)
优采云 发布时间: 2022-04-08 22:13java爬虫抓取动态网页(不使用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格式,需要解析才能提取数据。解析部分可以参考我之前写的