当前位置: 首页 > news >正文

Java网络爬虫-HttpClient工具类

关于用Java进行爬虫的资料网上实在少之又少,但作为以一名对Java刚刚初窥门径建立好兴趣的学生怎么能静得下心用新学的Python去写,毕竟Java是世界上最好的语言嘛 (狗头)

关于Java爬虫最受欢迎的一个框架Jsoup常常搭配HttpClient来使用,因为Jsoup.connect(url)下载网页没有多次重试的功能,所以我们更多的使用HttpClient来进行网页的下载,而Jsoup则更多的用来解析网页。比较专业的事还得专业的人来干!

对于下载网页我们没必要每次都花费大把的时间去写,直接写一个工具类,在Jsoup中直接调用即可

关于HttpClient

关于HttpClient主要有两个版本

  • org.apache.http.client.HttpClient `3.X`

  • org.apache.commons.httpClient.HttpClient `4.X`

相比较4.X的功能更加丰富简洁,但3.x也不差,下面拿3.x举例

HttpClient实例代码

package com.Jsoup;import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;import java.io.IOException;//下载网页工具,返回html对象
public class HttpUtil {static String fileName = null;static String content;/*** 获取网页主体内容,完成HttpClient的下载任务,剩下的交给Jsoup来解析* @param url URL地址* @param charset 设置编码格式* @return 返回网页 html内容 * @throws IOException 抛出IO异常*/public static String getContent(String url,String charset) throws IOException {//1.创建客户端对象并设置参数HttpClient httpClient = new HttpClient();//设置 Http 超时httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(2000);//2.生成GetMethod对象并设置参数GetMethod getMethod = new GetMethod(url);//设置 Get 请求超时getMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT,2000);getMethod.getParams().setContentCharset(charset);//设置请求重试处理-这是使用HttpClient下载网页而不用Jsoup的原因getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,new DefaultHttpMethodRetryHandler());//设置头信息//getMethod.getParams().setParameter(HttpMethodParams.USER_AGENT,"需要添加的代理信息");//3.执行 Get 请求int statusCode = httpClient.executeMethod(getMethod);//判断访问的状态码if (statusCode != HttpStatus.SC_OK){System.err.println("请求失败: "+getMethod.getStatusLine());fileName = null;}else {//4.处理 HTTP 响应内容//获得响应体内容content = getMethod.getResponseBodyAsString();}//5.释放连接getMethod.releaseConnection();//输出到控制台//System.out.println(content);return content;}}
注意:这里的用户代理(User-Agent)需要按需求设置,后期可能需要设置大量的代理,我们将设置一个Use-Agent库,每次执行爬虫任务将从中随机选取一个,防止被网站封锁

Jsoup代码

public class JsoupDemo01 {public static void main(String[] args) throws IOException {String url = "https://xxxx.com";String html =  HttpUtil.getContent(url,"UTF-8");//Jsoup.parse(String html)可以根据html文档来解析Document doc = Jsoup.parse(html);//具体解析网页不做展示,之后更新}
}

http://www.lryc.cn/news/34811.html

相关文章:

  • LeetCode203_203. 移除链表元素
  • 【洛谷 P1443】马的遍历 题解(广度优先搜索)
  • 为什么gpt输出有随机性?
  • 配置Clion用于STM23开发(Makefile)
  • 如何在 Istio 中使用 SkyWalking 进行分布式追踪
  • HBase高手之路1-Hbase简介
  • 计算机视觉手指甲标注案例
  • linux 字符串截取(cut)
  • 003+limou+HTML——(3)HTML列表
  • 设计模式---工厂模式
  • C++基础了解-13-C++ 数组
  • ICC2:限制LVT比例
  • Kettle工具通过JNDI连接Oracle集群
  • [ 常用工具篇 ] windows安装phpStudy_v8.1_X64
  • SpringBoot 如何将配置文件挂到 jar 包外面?
  • 蓝桥杯C/C++b组第一题个人整理合集(5年真题+模拟题)
  • 深入浅出PaddlePaddle函数——paddle.zeros
  • [力扣sql]
  • Docker基本操作
  • golang如何使用rocketmq 附加闭坑指南 建议收藏!!!
  • C++实现的二叉树创建和遍历,超入门邻家小女也懂了
  • 如何写出高质量的业务接口
  • 3.8多线程
  • 图文讲解MongoDB该怎么安装
  • 「ML 实践篇」机器学习项目落地
  • c++面试技巧-基础篇3
  • MySQL OCP888题解044-从服务器上导入mysql模式数据后的权限问题
  • 实战小项目之视频监控(1-2)
  • 人工智能基础--AI作业1-ML基础
  • 关于JS中this对象指向问题总结