1.1 HttpClient
HTTP 协议是 Internet 上使用得最多、最重要的协议之一,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。虽然在 JDK 的 java net包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。HttpClient 已经应用在很多的项目中,比如 Apache Jakarta 上很著名的另外两个开源项目 Cactus 和 HTMLUnit 都使用了 HttpClient。Commons HttpClient项目现已终止,不再开发。 它已被Apache HttpComponents项目里的HttpClient和HttpCore模块取代,它们提供了更好的性能和更大的灵活性。
1.2 引入依赖
向项目中引入HttpClient和Jsoup依赖。
Jsoup用于解析获取的HTML文本,可以像JS一样通过id和class获取元素。同时Jsoup也可访问页面。
1.3 创建简单的请求操作
1.3.1 创建实例
用于创建连接对象,如果请求方式为则可以创建对象,若为请求可创建对象,请求的参数为待访问的URL。
可以根据实际请求内容适当的增加的内容。调用的方法发起请求,并创建一个响应对象,可以通过判断响应状态码确定请求的结果。
根据现在的一些防爬虫设置,可能需要在添加固定的请求内容,例如、等内容区分人机,可根据实际情况设置。
1.3.2 Jsoup应用
通过调用的方法即可将原始的HTML页面解析为类,这样我们就能够通过、、等方式获取页面中的标签元素。
类为注意不要使用错类。
1.4 爬取过程中可能出现的问题
1.4.1 JS异步加载问题
随着前端技术的发展,在页面中应用AJAX、VUE和AngularJS等技术已经很普及,因此在使用时会发现,响应的结果与页面不相同,或者响应的页面并没有所需的内容。
因此可以从其他的思路来实现,例如我们可以通过访问内部接口获取响应值,通过这种方法可以跳过对页面的分析,直接获取想要的结果。主要难点在于分析该内容调用的接口。
例如我们查看CSDN的博客页面,点击搜索框可看到CSDN会推送热门的搜索信息,但是如果查看当前页面的网页源码是无法搜索到该内容的。
此时我们可以打开F12,查看页面的所有请求
此时我们可以只选择查看页面所有调用的接口,从中找到正确的接口。根据实际请求中携带参数和header的信息,编写代码。
一般勾选保留日志和停用缓存已防止页面发生重定向时丢失以前的请求内容。
1.4.2 反爬技术的影响
具体可查看知乎贴做爬虫怎可不知反爬虫?如何做反反爬虫。
1.5 爬取需要登录的页面
当需要获取登录后的页面信息时,就绕不开Cookie的问题。在请求时携带正确的Cookie值可直接跳过登录操作。该问题可通过两种方案解决。
1.5.1 在header中直接携带Cookie
在设置请求头时,可以直接绑定Cookie值,该Cookie值可以通过实际访问时查看请求内容获取,示例:
对于携带Cookie的方式登录存在一个问题,就是cookie存在有效期,当有效期过了之后就需要重新更换cookie,所以如果需要持续性的自动爬取数据,就存在很大弊端。
1.5.2 模拟登录自动获取Cookie
在发送请求时可以将登录信息添加到中去尝试请求登录,如果登录成功,登录后的Cookie会保留在中,再请求其他页面时则会跳过登录。
以CSDN的登录为例,通过F12查找登录接口,根据请求头信息,配置
该案例为失败案例,由于登录方式多变,可能出现的验证码等人机校验,导致用户登录的难度加大,例如上述案例,直接访问登录接口后,会直接重定向到人机验证界面,导致无法正常登录。有些页面也存在在前端进行密码加密,导致无法获取正确的密码。
因此上述例子只是提供一个思路。
2.1 HtmlUtil
htmlunit 是一款开源的java 页面分析工具,读取页面后,可以有效的使用htmlunit分析页面上的内容。项目可以模拟浏览器运行,被誉为java浏览器的开源实现。是一个没有界面的浏览器,运行速度迅速。是junit的扩展之一。
2.2 引入依赖
2.3 创建简单的请求操作
2.3.1 创建实例
对webClient的配置很重要,尤其是方法,使得模拟页面可以支持AJAX异步加载。
对于Vue和AngularJS渲染的页面HtmlUtil在其处理上也不是太好,加载JS也只能加载原始页面中包含的内容,
2.3.2 模拟浏览器操作
HtmlUtil可以创建一个无界面的浏览器,所以可以通过代码对文本框赋值和进行点击操作,完成一些简单的操作。示例:
该示例通过访问CSDN的首页,为搜索框赋值,操作点击后可获取搜索结果。
由于CSDN的搜索结果是通过Vue框架加载,所以无法获取到最终的结果。
2.4 爬取待登录的页面
操作与2.3.2节类似,主要思路为获取登录页面,为表单元素添加用户名和密码,再通过方法点击登录按钮,提交表单,登录成功后会自动将cookie存放在WebClient中,可通过WebClient再次访问其他需要登录的页面。
相较于HttpClient,HtmlUtil可以直接操作页面比访问接口相对容易,但是针对于Vue框架和需要验证码登录的页面还是存在问题。
到此这篇java爬虫步骤(java如何爬虫)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!参考资料:
HtmlUnit 官网
HtmlUtil API文档
HttpClient 官网
HttpClient API文档
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/jjc/57571.html