java爬虫抓取动态网页(爬虫遇到js动态数据时怎么办?*敏*感*词*网站详解(组图))
优采云 发布时间: 2021-09-27 15:24java爬虫抓取动态网页(爬虫遇到js动态数据时怎么办?*敏*感*词*网站详解(组图))
当爬虫遇到JS动态数据时,主要有两种解决方案:
使用一些库(如selenium)在模拟的浏览器环境中捕获数据。但是,这会消耗大量内存和CPU,并且爬虫效率较低,应尽量避免。手动分析JS请求并构造请求URL
接下来,我选择一幅卡通网站作为一个小例子来介绍第二种方法
我们的目标是获取卡通图片的URL并下载它
判断要爬网的数据是否动态加载
使用chrome打开网页,右键单击卡通图片->;检查
我们可以在里面看到图片的URL。右键单击此处(蓝色部分)->;复制->;复制XPath获取与图片对应的XPath,然后可以使用请求和XPath获取图片URL。当然,它最终失败了。因为这里的图片是由JS动态加载的
(当然,还有一种更简单的判断方法。直接安装chrome插件toggle JavaScript,它可以判断页面的哪个部分是由JS加载的)
获取与要爬网的数据相关的JS代码信息
我们可以查看网页源代码,Ctrl+F定位图像ID“curpic”:
如您所见,没有图片的URL,图片是由JS加载的。阅读JS代码,我们可以知道图片URL由以下代码行决定:
pic2.src = hosts[getHost()] + picAy[curIndex]
在源代码中查找hosts和picay,发现它们只出现在这里。这表明这两个数组可以由JS代码加载
查找与要爬网的数据相关的JS请求
回到卡通页面,我们打开chrome的F12,点击网络,检查JS,刷新网页,查看相关JS请求对应的预览,查看哪些收录主机和picay:
嗯,进展惊人地顺利。第一个JS收录我们想要查找的内容。从这个图中,我们可以看到,当我们进入卡通的第一页时,JS代码会请求卡通所有页面的图片URL。单击请求的标题,我们可以看到请求的URL,其中收录JS文件名
那么,在编写程序时,我们如何获得JS文件名呢
看看其他的*敏*感*词*,我们可以发现,虽然这个JS代码的命名是不规则的,但它在网页源代码中通常位于第一个JS位置。这样,O(∩ ∩) O可以通过正则表达式提取。哈哈~
知道JS文件名后,我们就可以构造请求URL了,上图就是一个例子:
url = 'https' + '//comic.sfacg.com/Utility/1887/ZP/117.js'
总结
到目前为止,让我们总结一下如何下载网站*敏*感*词*片:
获取*敏*感*词*第一页的URL,获取URL响应的HTML,在HTML中找到第一个JS代码文件名,构造请求URL,获取JS的响应内容,并从中提取所有图片URL
总结本例中获取JS动态数据的想法:
判断数据是否是JS加载的,如果是JS加载的,则在网页源代码中检查要爬网的数据附近的JS代码,获取关键信息(如一些变量名),返回要爬网的网页,按F12(my chrome),单击网络,检查JS,刷新网页,获取JS请求,逐个检查每个请求的预览,查看是否有任何与要爬网的内容相关的信息。如果请求的响应内容收录我们需要的信息,请检查请求的标题和URL,并找到构造此类请求URL的方法