htmlunit 抓取网页(遇到一个网页数据抓取的任务,给大家分享下!)
优采云 发布时间: 2021-12-19 08:03htmlunit 抓取网页(遇到一个网页数据抓取的任务,给大家分享下!)
遇到一个爬取网页数据的任务,分享给大家。
说到网页信息抓取,相信Jsoup基本上是首选工具。完整的类似JQuery的操作让人感觉很舒服。不过,今天我们要说说Jsoup的缺点。
这是某网站的搜索栏,填写一些格式化数据进行经纬度转换,初始化是这样的,然后用jsoup捕获的代码如下:
当我们添加数据时,抓取的页面信息保持不变。这就是Jsoup的缺点。如果Jsoup抓取页面,页面加载后的所有数据,ajax加载的异步数据是不会抓取的。到达的。
这里再给大家介绍一个开源项目:HttpUnit,这个名字是用来测试的,但是爬取数据也不错,是一个完美的解决方案。HttpUnit其实相当于一个没有UI的浏览器,可以让页面上的js执行完成后,再次抓取信息。
有时我们使用requests抓取页面时,得到的结果可能与浏览器中看到的不同:在浏览器中可以看到正常显示的页面数据,但是使用requests得到的结果却不是。这是因为获取的请求都是原创的 HTML 文档,浏览器中的页面是 JavaScript 处理数据后生成的结果。这些数据的来源有很多,可能是通过Ajax加载的,可能是收录在HTML中的,也可能是通过JavaScript和特定算法计算后生成的文档中的文档。
在第一种情况下,数据加载是一种异步加载方法。原创页面最初不会收录一些数据。原创页面加载完成后,会向服务器请求一个接口来获取数据,然后对数据进行处理和呈现。在网页上,这实际上是一个 Ajax 请求。
根据Web的发展趋势,这种形式的页面越来越多。网页的原创 HTML 文档不收录任何数据。数据通过Ajax统一加载后呈现,从而在Web开发中实现前后端分离,减少服务器直接渲染页面带来的压力。
因此,如果遇到这样的页面,可以直接使用requests等库来抓取原创页面,无法获取有效数据。这时候就需要从网页后台分析发送到界面的Ajax请求。如果可以使用requests来模拟ajax请求,那么就可以成功爬取。
但是我没有使用这个测试框架:我解决问题的想法是
总结:ajax数据的爬取过程:
分析网页信息,抓取网页
1. 提交我们的搜索时,会加载这部分内容,并且会有表单数据生成,
体现在节目中:
2.服务器加载这个页面,我们输入表单信息,这个表单信息就是我们的搜索条件,例如:
体现在节目中:
3.js返回加载的页面,并在该页面添加信息
jsoup 可以解析页面。
4.模拟登录部分:
静态网页:jsoup
ajax 网页:webdriver+selenium+jsoup