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.mzph.cn/pingmian/17856.shtml

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

相关文章

Java面试八股之++操作符是线程安全的吗

操作符是线程安全的吗 操作符本身在Java中并不是线程安全的。这个操作实际上包含三个步骤&#xff1a;读取变量的值、将值加1、然后将新值写回内存。在多线程环境下&#xff0c;如果多个线程同时对同一个变量执行操作&#xff0c;就可能出现竞态条件&#xff08;race conditio…

中科驭数驭云、超低时延网络案例双双入选第七届数字中国建设峰会数字化转型典型应用案例

5月24日-25日&#xff0c;第七届数字中国建设峰会在福州召开。在“数字赋能民营经济专业工作会议”上&#xff0c;中关村云计算产业联盟发布了《2024中小企业数字化转型典型应用案例集》&#xff0c;中科驭数驭云、超低时延网络两大方案入选。 作为国内领先的DPU芯片及解决方案…

深入探索Java中的Lambda表达式

引言 Lambda表达式是Java 8中引入的一项重大特性&#xff0c;它标志着Java语言正式步入了函数式编程的大门。Lambda表达式提供了一种更为简洁的语法&#xff0c;使得开发者能够以更少的代码实现函数式接口。本专栏将从Lambda表达式的基础概念讲起&#xff0c;逐步深入到其在集…

vue中在mounted使用$refs获取不到DOM元素

vue中在mounted使用$refs获取不到DOM元素 前言解决方案1、通过使用$nextTick来获取2、updated中获取 前言 在使用ref的时候&#xff0c;在mounted中通过$ref获取节点是获取不到报undefined this.$refs.xx 为 undefined 解决方案 在mounted钩子中加载回来的数据不会在这个阶段更…

Open3D-Geometry-2:Mesh网格的一些基础操作示例

0. 引言 Open3D 有一个名为 的 3D 三角形网格数据结构TriangleMesh。下面的代码显示了如何从ply文件中读取三角形网格并打印其顶点和三角形。 import open3d as o3d import numpy as npprint("Testing mesh in Open3D...") armadillo_mesh = o3d.data.ArmadilloMes…

商品上线搜索服务

文章目录 1.引入检索页面1.确保search目录和list.html都成功引入2.修改list.html&#xff0c;增加命名空间3.后端编写接口 SearchController.java4.测试访问 2.带条件分页检索1.前端要求返回数据的格式2.构建vo&#xff0c;SearchResult.java3.SkuInfoService.java 购买用户根据…

日志不是核心功能,避免过度设计

日志是记录用户操作、系统运行状态的一种手段&#xff0c;完整、准确的日志能够帮助开发和运维人员快速定位和分析问题。但在实际工作过程中&#xff0c;经常将软件问题过多和问题修复过慢归结于日志记录不完善方面&#xff0c;而去大张旗鼓的去设计开发日志记录、备份功能&…

电脑无法远程桌面连接,关于电脑无法建立远程桌面连接的问题分析与解决方案

在信息化快速发展的今天&#xff0c;远程桌面连接已成为许多企业和个人用户进行远程办公、技术支持以及数据管理的必备工具。然而&#xff0c;当电脑无法建立远程桌面连接时&#xff0c;可能会对用户的工作和日常生活造成极大的不便。本文将深入分析电脑无法远程桌面连接的原因…

详解Java ThreadLocal

个人博客 详解Java ThreadLocal | iwts’s blog Java ThreadLocal ThreadLocal提供了线程内存储变量的能力&#xff0c;这些变量不同之处在于每一个线程读取的变量是对应的互相独立的。通过get和set方法就可以得到当前线程对应的值。 TreadLocal存储模型 ThreadLocal的静态…

Oracle EBS API创建AP发票报错:ZX_TAX_STATUS_NOT_EFFECTIVE和ZX_REGIME_NOT_EFF_IN_SUBSCR-

背景 由创建国外业务实体财务未能提供具体国家地区会计税制&#xff0c;而是实施人员随便选择其它国外国家地区会计税制。导致客户化创建AP发票程序报错&#xff1a;UNEXPECTED TAX ERROR-导入时出现意外的税务错误ZX_TAX_STATUS_NOT_EFFECTIVE-ZX_REGIME_NOT_EFF_IN_SUBSCR-ZX…

mysql数据库管理面试题-2

31. 请描述MySQL数据库中的窗口函数及其用途。 MySQL中的窗口函数&#xff0c;也称为分析函数&#xff0c;是一种在查询中处理数据行的特殊函数。它们为用户提供了在查询结果集中进行排序、分组以及计算滚动聚合值的能力&#xff0c;而不需要重新组织查询结果集。窗口函数主要…

如何克隆非默认分支

直接git clone下来的我们知道是默认分支&#xff0c;那如何克隆其他分支呢&#xff1a; 比如这个&#xff0c;我们想克隆AdvNet。 我们可以在本地文件夹打开Git Bash 依次输入&#xff1a; git clone --branch AdvNet https://github.com/wgcban/SemiCD.git cd SemiCD git b…

计算机操作系统体系结构

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天给大家讲讲操作系统。 当今的操作系统趋向于越来越复杂&#xff0c;因为它们提供许多服务&#xff0c;并支持各种硬件和软件资源&#xff08;请参见“操作系统思想&#xff1a;尽量保持简单”&#xff0…

267 基于matlab的信号处理GUI人机交互

基于matlab的信号处理GUI人机交互&#xff0c;利用GUI功能完成包括振幅调制AM&#xff08;Amplitude Modulation&#xff09;&#xff0c;双边带调幅信号DSB&#xff08;double sideband&#xff09;&#xff0c;单边带信号SSB&#xff08;single sideband &#xff09;&#x…

《TCP/IP网络编程》(第十一章)进程间通信

进程间通信意味着两个不同的进程间可以交换数据&#xff0c;它使得不同的进程能够协同工作&#xff0c;实现复杂的系统功能。 1.通过管道实现进程间通信 下图是基于 管道&#xff08;PIPE&#xff09; 的进程间通信结构模型 管道不属于进程的资源&#xff0c;属于操作系统的资…

数字化工厂怎么收集,处理数据?

数字化工厂的数据收集与处理 数字化工厂是现代化工厂&#xff0c;利用数字技术和数据分析提高效率和优化流程。数据分析作为数字化工厂的核心技术&#xff0c;对数据的获取与处理至关重要。在数字化工厂中&#xff0c;数据的来源包括企业内部信息系统、物联网信息以及外部信息&…

美光EMMC芯片丝印型号查询 8LK17/D9PSK, OXA17/JY997

问题说明 最近在使用美光EMMC的时候&#xff0c;发现通过芯片丝印查询不到 芯片的规格说明书&#xff1b; 经过查阅资料&#xff0c;发现美光的EMMC芯片 “由于空间限制&#xff0c;FBGA 封装组件具有与部件号不同的缩写部件标记”&#xff0c;需要通过官网查询丝印的FBGA cod…

基于SpringBoot的在线拍卖系统源码数据库

基于SpringBoot的在线拍卖系统源码数据库 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍…

Autosar Dcm配置-特定NRC实现方式-基于ETAS软件

文章目录 前言工具配置代码编写总结 前言 项目开发过程中&#xff0c;诊断服务一般客户需求或系统需求都会有特定NRC(一般为NRC22-条件不满足)&#xff0c;也就会有特定的条件&#xff0c;需要手动加代码实现。本文介绍ETAS工具中配置的接口及简单实现。 工具配置 对于每一个…