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中即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/340919.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通过DirectML和ONNXRuntime运行Phi-3模型

更多精彩内容&#xff0c;欢迎关注我的公众号“ONE生产力”&#xff01; 上篇我们讲到通过Intel Core Ultra系列处理器内置的NPU加速运行Phi-3模型&#xff0c;有朋友评论说他没有Intel处理器是否有什么办法加速Phi-3模型。通常&#xff0c;使用GPU特别是NVIDA的GPU加速AI模型…

windows上安装MongoDB,springboot整合MongoDB

上一篇文章已经通过在Ubuntu上安装MongoDB详细介绍了MongoDB的各种命令用法。 Ubuntu上安装、使用MongoDB详细教程https://blog.csdn.net/heyl163_/article/details/133781878 这篇文章介绍一下在windows上安装MongoDB&#xff0c;并通过在springboot项目中使用MongoDB记录用户…

SpaceX: 太空火箭自主精准着陆

本文是根据Lars Blackmore在16年的一篇公开论文翻译而来&#xff0c;虽然有些早而且是科普文章&#xff0c;但是可以初见一些SpaceX火箭着陆的细节&#xff0c;后面我会对spaceX landing control 技术主管MIT博士期间研究火箭控制算法的论文进行讲解&#xff0c;敬请期待。 Lar…

【php实战项目训练】——thinkPhP的登录与退出功能的实现,让登录退出畅通无阻

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

C/C++ 进阶(5)二叉平衡搜索树(AVL树)

个人主页&#xff1a;仍有未知等待探索-CSDN博客 专题分栏&#xff1a;C 目录 一、概念 二、平衡因子 三、操作 插入 旋转 左单旋 右单旋 左右双旋 右左双旋 一、概念 二叉平衡搜索树又称AVL树&#xff0c;是一种特殊的二叉搜索树。一般的二叉搜索树在遇到数据有序时&…

SOLIDWORKS修改零件时出现错误怎么办?

我们在使用SOLIDWOKRS进行零件建模过程中往往避免不了修改&#xff0c;但在修改后又常常会出现零件报错的情况&#xff0c;设计树中会出现一堆的错误和警告&#xff0c;我们如何快速处理这些问题呢&#xff1f; 我们都知道SOLIDWOKRS零件通常包含两大类的对象&#xff0c;分别…

Docker 入门版

目录 1. 关于Docker 2. Dockr run命令中常见参数解读 3. Docker常见命令 4. Docker 数据卷 5. Docker本地目录挂载 6. 自定义镜像 Dockerfile 语法 自定义镜像模板 Demo 7. Docker网络 1. 关于Docker 在docker里面下载东西&#xff0c;就是相当于绿色面安装板&#x…

python之生成器表达式

背景 生成器表达式&#xff0c;整个表达式都是另一个函数的唯一入参&#xff0c;则不需要带括号&#xff1b;若他只是其中一个参数&#xff0c;则需要圆括号包裹。 演示

响应式流和reactor框架进阶

响应式流和reactor框架进阶 响应式流创建、转换、处理 本文档主要介绍在响应式编程中如何从流中获取数据并处理。 前提条件 假设您已经能掌握Java基础、Maven使用、Lamda表达式、响应式编程等基础。 如何获取流中数据 &#x1f30f; 说明 1、不要试图从流中获取数据出来&a…

MMUNet:形态学特征增强网络在结肠癌病理图像分割中的应用

MMUNet: Morphological feature enhancement network for colon cancer segmentation in pathological images. 发表在&#xff1a;Biomedical Signal Processing and Control2024--影响因子&#xff1a;3.137 南华大学的论文 论文地址&#xff1a;main.pdf (sciencedirecta…

地理信息科学中的大数据挑战

在信息化爆炸的时代&#xff0c;地理信息科学&#xff08;GIScience&#xff09;正经历着前所未有的变革&#xff0c;其中&#xff0c;地理空间大数据的涌现为科学研究与应用带来了前所未有的机遇与挑战。作为地理信息与遥感领域的探索者&#xff0c;本文旨在深入剖析地理空间大…

找不到steam_api64.dll,无法继续执行的原因及解决方法

电脑已经成为我们生活中不可或缺的一部分。然而&#xff0c;在使用电脑的过程中&#xff0c;我们经常会遇到一些常见的问题&#xff0c;其中之一就是找不到某个特定的动态链接库文件&#xff0c;比如steamapi64.dll。这个问题可能会导致某些应用程序无法正常运行&#xff0c;给…

音视频开发—音频相关概念:数模转换、PCM数据与WAV文件详解

文章目录 前言1.模拟数字转换&#xff08;ADC&#xff09;1.1ADC的关键步骤&#xff1a; 2.数字模拟转换&#xff08;DAC&#xff09;2.1DAC 的基本流程包括&#xff1a; 3.PCM数据3.1PCM 数据的关键要素包括&#xff1a; 4.WAV文件4.1 WAV的构成4.2WAV文件的标准块结构4.3WAV的…

kettle从入门到精通 第六十五课 ETL之kettle 执行动态SQL语句,轻松实现全量增量数据同步

本次课程的逻辑是同步t1表数据到t2表&#xff0c;t1和t2表的表机构相同&#xff0c;都有id&#xff0c;name,createtime三个字段。 CREATE TABLE t1 (id bigint NOT NULL AUTO_INCREMENT,name varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,cr…

View->Bitmap缩放到自定义ViewGroup的任意区域(Matrix方式绘制Bitmap)

Bitmap缩放和平移 加载一张Bitmap可能为宽高相同的正方形&#xff0c;也可能为宽高不同的矩形缩放方向可以为中心缩放&#xff0c;左上角缩放&#xff0c;右上角缩放&#xff0c;左下角缩放&#xff0c;右下角缩放Bitmap中心缩放&#xff0c;包含了缩放和平移两个操作&#xf…

数据整理操作及众所周知【数据分析】

各位大佬好 &#xff0c;这里是阿川的博客&#xff0c;祝您变得更强 个人主页&#xff1a;在线OJ的阿川 大佬的支持和鼓励&#xff0c;将是我成长路上最大的动力 阿川水平有限&#xff0c;如有错误&#xff0c;欢迎大佬指正 Python 初阶 Python–语言基础与由来介绍 Python–…

Opencv 色彩空间

一 核心知识 色彩空间变换&#xff1b; 像素访问&#xff1b; 矩阵的、-、*、、&#xff1b; 基本图形的绘制 二 颜色空间 RGB&#xff1a;人眼的色彩空间&#xff1b; OpenCV默认使用BGR&#xff1b; HSV/HSB/HSL; YUV(视频); 1 RGB 2 BGR 图像的多种属性 1 访问图像(Ma…

Pytorch 笔记

执行下面这段代码后&#xff0c;为什么返回的是 2 &#xff1f; vector torch.tensor([7, 7]) vector.shape为什么返回的是 torch.Size([2])&#xff1f; 当你创建一个PyTorch张量时&#xff0c;它会记住张量中元素的数量和每个维度的大小。在你的代码中&#xff0c;torch.t…

Redis 线程模型

Redis 线程模型 背景简介Redis 单线程客户端发起 Redis 请求命令的工作原理单线程面临的挑战及问题 Redis 多线程Redis v4.0 多线程命令Redis v6.0 多线程网络模型 总结 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术…

LangChain学习之 Question And Answer的操作

1. 学习背景 在LangChain for LLM应用程序开发中课程中&#xff0c;学习了LangChain框架扩展应用程序开发中语言模型的用例和功能的基本技能&#xff0c;遂做整理为后面的应用做准备。视频地址&#xff1a;基于LangChain的大语言模型应用开发构建和评估。 2. Q&A的作用 …