httpunit 抓取网页(Java语言中应用一个工具类的应用工具实战步骤)
优采云 发布时间: 2021-09-25 10:18httpunit 抓取网页(Java语言中应用一个工具类的应用工具实战步骤)
jsoup最大的优点是可以快速抓取静态页面,并且可以快速识别静态页面中的标签,解析页面标签内容的速度和jquery一样快。
Jsoup在处理动态页面时遇到了一些弊端,因为动态页面的内容是通过ajax通过浏览器动态访问后端服务器,返回内容后使用js脚本解析页面上的内容。Jsoup 无法解析动态内容。
httpunit 只是填补了 jsoup 的不足。可以动态模拟浏览器访问URL,然后动态获取URL上的内容进行分析,从而完成动态爬虫的爬取功能。
四、爬虫模拟点击按钮代码了解httpunit的api
大家都知道,在Java语言中应用一个工具或者工具类时,首先需要创建工具类的一个对象,然后调用该对象的方法来完成一些业务,httpunit也不例外。下面是创建对象的代码:
final WebClient webClient=new WebClient();
爬虫需要传入一个页面的url来做爬取功能,然后获取该url的page对象,代码如下:
final HtmlPage page=webClient.getPage("");
获取代表页面的页面对象后,就可以解析页面元素,可以以txt文本方式或xml文件方式显示页面。代码如下:
System.out.println(page.asXml());
System.out.println(page.asText());
完成页面内容分析后不要忘记销毁模拟工具对象。api代码如下:
webClient.closeAllWindows();
爬虫模拟百度搜索框点击按钮实战
第一步:创建webClient浏览器模拟对象,调用getPage方法方法和百度主页url地址,获取代表主页的htmlpage对象。由于我们是模拟静态页面,需要关闭js解析,而爬虫不需要样式,所以我们还需要关闭css样式设置,具体代码如下图所示:
第二步:由于我们是用爬虫模拟百度搜索框点击搜索,所以首先要得到百度首页的form表单,代码如下:
最终的 HtmlForm 表单 = htmlpage.getFormByName("f");
拿到表单ID后,再百度一下这个蓝色点击按钮的ID,代码如下:
final HtmlSubmitInput button = form.getInputByValue("百度点击");
最后获取百度搜索框的ID,以便以后模拟点击,代码如下:
final HtmlTextInput textField = form.getInputByName("q1");
第三步:准备工作已经完成,获取到的ID已经获取。接下来,我们可以在搜索框中模拟手动输入。然后点击按钮完成搜索,具体代码如下图所示:
获取到的搜索结果页面的数据以xml格式显示。XML 文件格式更规则,标签更完整。在解析内容的时候,一个标签中的大部分内容都被解析了,所以xml格式相比txt更加优雅。
最后解析数据时,我们推荐使用jsoup作为工具。通过jsoup解析静态页面的标签更方便简洁,使用更方便。