httpunit 抓取网页(遇到一个网页数据抓取的任务,给大家分享下!)

优采云 发布时间: 2022-01-17 19:13

  httpunit 抓取网页(遇到一个网页数据抓取的任务,给大家分享下!)

  如果您遇到网络数据抓取的任务,请与您分享。

  说到网页信息爬取,相信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

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线