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

HttpClient cookie爬虫记录

 记录一次java语言使用httpclient爬取网站接口数据的经历

需要用到的依赖:

httpclient和httpcore是封装了http请求的工具类

jsoup可以将返回的网页html找到你需要的xml节点,很方便

	<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.13</version> <!-- 请检查并使用最新版本 --></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpcore</artifactId><version>4.4.14</version> <!-- 请检查并使用最新版本 --></dependency><dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.13.1</version></dependency>

 java类:

需要将网站请求中的cookie配置到BasicClientCookie 对象中,然后添加到请求中去,如何获取cookie文章最后有截图

package com.utils;import org.apache.http.HttpResponse;
import org.apache.http.client.CookieStore;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.impl.cookie.BasicClientCookie;
import org.apache.http.util.EntityUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;import java.io.IOException;public class HttpClientWithCookieExample {public static void main(String[] args) throws InterruptedException {// 创建一个Cookie存储对象(支持多个cookie)CookieStore cookieStore = new BasicCookieStore();// 创建一个Cookie并设置属性BasicClientCookie cookie = new BasicClientCookie("ASP.NET_SessionId", "mkuq512333ljwcqkfq4i");cookie.setDomain("abc.com");cookie.setPath("/");BasicClientCookie cookie1 = new BasicClientCookie("Email", "abc@qq.com");cookie1.setDomain("abc.com");cookie1.setPath("/");BasicClientCookie cookie2 = new BasicClientCookie("Password", "511B0D5F341BDDBD9A5348923B48D14C");cookie2.setDomain("abc.com");cookie2.setPath("/");// 将Cookie添加到Cookie存储中cookieStore.addCookie(cookie);cookieStore.addCookie(cookie1);cookieStore.addCookie(cookie2);// 创建一个HttpClientContext对象,并将Cookie存储设置进去HttpClientContext context = HttpClientContext.create();context.setCookieStore(cookieStore);// 创建HttpClientHttpClient httpClient = HttpClients.custom().setDefaultCookieStore(cookieStore).build();extracted_area( context, httpClient);}/*** 爬取区域信息* @param context* @param httpClient* @throws InterruptedException*/private static void extracted_area(HttpClientContext context, HttpClient httpClient) throws InterruptedException {int page = 1;HttpGet request = null;for (int i = 1; i<= page; i++){// 创建一个HttpGet请求,用于发送HTTP GET请求request = new HttpGet("https://abc.com/adminKdUser/GuanLi/AreaList.aspx");// 设置请求头try {// 使用HttpClient发送请求HttpResponse response = httpClient.execute(request, context);String result = "";if (response != null) {int statusCode = response.getStatusLine().getStatusCode();result = EntityUtils.toString(response.getEntity(), "utf-8");//System.out.println("\n返回码:" + statusCode + "\n返内容:" + result);Document doc = Jsoup.parse(result);Elements tables = doc.select("table");if (tables == null){System.out.println("第"+i+"页===终止");break;}System.out.println("第"+i+"页==="+tables.html());/*   if (result.contains("<div class=\"content\">")){int s = result.indexOf("<div class=\"content\">");result = result.substring(s);System.out.println("截取后返内容:" + result);}*/JDBCBean.executeUpdate(i,"<table>"+tables.html()+"</table>");}} catch (IOException e) {System.out.println(i+"解析失败");}finally{Thread.sleep(1000);}}}private static void extracted_fanyi(HttpClientContext context, HttpClient httpClient) throws InterruptedException {int page = 984;HttpGet request = null;for (int i = 1; i<= page; i++){// 创建一个HttpGet请求,用于发送HTTP GET请求request = new HttpGet("https://abc.com/123/GuanLi/FanYiList.aspx?page="+i);// 设置请求头try {// 使用HttpClient发送请求HttpResponse response = httpClient.execute(request, context);String result = "";if (response != null) {int statusCode = response.getStatusLine().getStatusCode();result = EntityUtils.toString(response.getEntity(), "utf-8");//System.out.println("\n返回码:" + statusCode + "\n返内容:" + result);Document doc = Jsoup.parse(result);Elements tables = doc.select("table");if (tables == null){System.out.println("第"+i+"页===终止");break;}System.out.println("第"+i+"页==="+tables.html());/*   if (result.contains("<div class=\"content\">")){int s = result.indexOf("<div class=\"content\">");result = result.substring(s);System.out.println("截取后返内容:" + result);}*/JDBCBean.executeUpdate(i,"<table>"+tables.html()+"</table>");}} catch (IOException e) {System.out.println(i+"解析失败");}finally{Thread.sleep(1000);}}}private static void extracted( HttpClientContext context, HttpClient httpClient) throws InterruptedException {int page = 2415;HttpGet request = null;for (int i = 1; i<= page; i++){// 创建一个HttpGet请求,用于发送HTTP GET请求request = new HttpGet("https://abc.com/123/User/GoodRecordList.aspx?page="+i);// 设置请求头try {// 使用HttpClient发送请求HttpResponse response = httpClient.execute(request, context);String result = "";if (response != null) {int statusCode = response.getStatusLine().getStatusCode();result = EntityUtils.toString(response.getEntity(), "utf-8");//System.out.println("\n返回码:" + statusCode + "\n返内容:" + result);Document doc = Jsoup.parse(result);Elements tables = doc.select("table");if (tables == null){System.out.println("第"+i+"页===终止");break;}System.out.println("第"+i+"页==="+tables.html());/*   if (result.contains("<div class=\"content\">")){int s = result.indexOf("<div class=\"content\">");result = result.substring(s);System.out.println("截取后返内容:" + result);}*/JDBCBean.executeUpdate(i,"<table>"+tables.html()+"</table>");}} catch (IOException e) {System.out.println(i+"解析失败");}finally{Thread.sleep(1000);}}}
}

 此处不方便透露实际网站,就用百度来作例子,取请求标头中的cookie内容,并且拼接到BasicClientCookie中即可

相关文章:

  • 46. 全排列 - 力扣(LeetCode)
  • SpringJDBC
  • ubuntu24.04LVM扩容问题
  • 【强化学习04】Q学习时序差分法
  • 操作系统 - 输入/输出(I/O)管理
  • 【PHP小课堂】学习了解PHP中Memcached扩展的使用
  • 26计算机操作系统408考研--操作系统处理机调度篇章(五)
  • 每天一个数据分析题(三百三十五)
  • 【软件工程】【23.04】p1
  • 关于我转生从零开始学C++这件事:升级Lv.25
  • 【MySQL精通之路】SQL优化(1)-查询优化(9)-外部联接优化
  • 深入Java:JSON解析与操作的艺术
  • Ubuntu安装IPOPT和Casadi
  • 打印机里失败的任务删不掉的解决办法 斑马打印机更新电脑驱动和升级打印机固件 提示ribbon out 并黄状态亮+黄供应闪
  • python列表底层原理
  • CSS居中完全指南——构建CSS居中决策树
  • Docker入门(二) - Dockerfile
  • JavaScript 基础知识 - 入门篇(一)
  • php中curl和soap方式请求服务超时问题
  • Puppeteer:浏览器控制器
  • TypeScript实现数据结构(一)栈,队列,链表
  • 从伪并行的 Python 多线程说起
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 服务器从安装到部署全过程(二)
  • 工作中总结前端开发流程--vue项目
  • 坑!为什么View.startAnimation不起作用?
  • 力扣(LeetCode)21
  • 聊聊flink的TableFactory
  • 如何在GitHub上创建个人博客
  • 我这样减少了26.5M Java内存!
  • 详解移动APP与web APP的区别
  • 项目管理碎碎念系列之一:干系人管理
  • 一些css基础学习笔记
  • 由插件封装引出的一丢丢思考
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 责任链模式的两种实现
  • ​必胜客礼品卡回收多少钱,回收平台哪家好
  • ​用户画像从0到100的构建思路
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • $NOIp2018$劝退记
  • (7)svelte 教程: Props(属性)
  • (BAT向)Java岗常问高频面试汇总:MyBatis 微服务 Spring 分布式 MySQL等(1)
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (附源码)ssm高校实验室 毕业设计 800008
  • (回溯) LeetCode 131. 分割回文串
  • (南京观海微电子)——示波器使用介绍
  • (三)Kafka离线安装 - ZooKeeper开机自启
  • (十) 初识 Docker file
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (转)EOS中账户、钱包和密钥的关系