httpunit 抓取网页(遇到一个网页数据抓取的任务,给大家分享下!)
优采云 发布时间: 2022-01-17 19:13httpunit 抓取网页(遇到一个网页数据抓取的任务,给大家分享下!)
如果您遇到网络数据抓取的任务,请与您分享。
说到网页信息爬取,相信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