HttpClient cookie爬虫记录

news2025/2/23 10:23:08

 记录一次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);
 
        // 创建HttpClient
        HttpClient 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.coloradmin.cn/o/1709383.html

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

相关文章

Spring系列-01-IOC的依赖查找和依赖注入

IOC基础 IOC发展 初始场景, 不使用IOC如何实现 假定现在有一下需求, 开始使用的数据源是MySQL, 后续数据源变动为Oracle, 那么我们的代码就需要改动 每次切数据源都需要改动, 那么进行优化 静态工厂解决强依赖 在01版本基础上, 使用静态工厂对多个数据源进行了封装, 要哪…

Unity UGUI系统概念分析

文章目录 前言一、UGUI运行原理二、UGUI组件分析1、Canvas组件2、Canvas Scaler3、Graphic Raycaster组件4、EventTrigger组件5、Image 和 RawImage组件5、Mask 和 RectMask2D组件6、Button、Sider、DropDown等组件 三、UGUI源码分析三、UGUI优化四、UI框架设计五、UI适配总结 …

三十一、openlayers官网示例Draw Features解析——在地图上自定义绘制点、线、多边形、圆形并获取图形数据

官网demo地址&#xff1a; Draw Features 先初始化地图&#xff0c;准备一个空的矢量图层&#xff0c;用于显示绘制的图形。 initLayers() {const raster new TileLayer({source: new XYZ({url: "https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/…

快团团帮卖团长怎么对供货大团长进行评分?

都说帮卖“躺赚”&#xff1f; 一旦遇团不淑&#xff0c;惨遭不靠谱团长挖坑&#xff0c;售后拖延、发货慢、产品瑕疵…… 加上顾客夺命连环催&#xff0c;双面夹击&#xff0c;夹缝生存。供货团长靠不靠谱太重要了&#xff01; 快团团供货团长评分系统上线&#xff01; 帮卖团…

深入理解MySQL索引下推优化

在MySQL中&#xff0c;索引的使用对于查询性能至关重要。然而&#xff0c;即使有合适的索引&#xff0c;有时查询性能仍然不尽如人意。索引下推&#xff08;Index Condition Pushdown&#xff0c;ICP&#xff09;是一项能够进一步优化查询性能的技术。本文将详细讲解索引下推的…

Postman入门 - 环境变量和全局变量

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、发送请求 二、设置并引用环境变量 比如&#xff1a;我建的这个生产环境 使用环境有两个方式&…

大学数学常用的搜题软件?分享四个搜题直接出答案的软件 #微信#媒体#职场发展

以下软件拥有强大的搜索功能&#xff0c;能够快速找到与题目相关的资料和答案&#xff0c;让大学生们更容易理解和掌握知识点。 1.The Sky The Sky 是一个让人惊艳的天文知识学习软件&#xff0c;也是一个唯美好看的天文科普软件。 它的功能全面丰富&#xff0c;支持识别查看…

常见排序算法之插入排序

目录 一、直接插入排序 1.1 什么是插入排序 1.2 代码思路 1.3 C语言源码 二、希尔排序 2.0 插入排序的弊端 2.1 什么是希尔排序&#xff1f; 2.2 排序思路 2.3 C语言源码 一、直接插入排序 1.1 什么是插入排序 插入排序是一种简单直观的排序算法&#xff0c;它通过构…

003 仿muduo实现高性能服务器组件_前置知识

​&#x1f308;个人主页&#xff1a;Fan_558 &#x1f525; 系列专栏&#xff1a;仿muduo &#x1f339;关注我&#x1f4aa;&#x1f3fb;带你学更多知识 文章目录 前言时间轮timewheel设计正则表达式介绍&#xff08;了解知道怎么使用&#xff09;通用型any容器的实现 小结 …

蓝牙模块选型之蓝牙功能

蓝牙模块&#xff0c;是一种集成蓝牙功能的PCBA板&#xff0c;用于短距离无线通讯&#xff0c;蓝牙模块将芯片和外围硬件电路集成到一个PCB上&#xff0c;开发出所需的内置程序实现蓝牙功能的设备。可以通过相关接口和MCU控制设备进行数据传输、可实现蓝牙标准通信和组网。 目前…

海外仓系统要多少钱?最贵的未必是最好的,性价比高的才是

海外仓系统可以说已经是现在海外仓管理不可或缺的重要工具&#xff0c;然而&#xff0c;很多海外仓企业在选择海外仓系统时最头疼的问题就是不知道到底多少钱才合适。 确实&#xff0c;现在的海外仓系统市场价格体系非常多&#xff0c;几万几十万各种定价都有&#xff0c;让人…

揭秘编程逻辑:布瑞克(break)与坎特牛(continue)的较量

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、布瑞克与坎特牛&#xff1a;逻辑差异的探索 二、代码案例分析&#xff1a;布瑞克与坎特…

远程抄表及预付费管理系统:智能管理的新篇章

1.系统简述 远程抄表及预付费管理系统是现代能源管理方面的一项重要自主创新&#xff0c;它将传统手动式抄水表方式转变为自动化技术、智能化管理模式&#xff0c;大大提高了高效率并减少了经营成本。该系统搭载了前沿的通讯技术、数据分析技术和财务管理系统核心理念&#xf…

UVa1466/LA4849 String Phone

UVa1466/LA4849 String Phone 题目链接题意分析AC 代码 题目链接 本题是2010年icpc亚洲区域赛大田赛区的G题 题意 平面网格上有n&#xff08;n≤3000&#xff09;个单元格&#xff0c;各代表一个重要的建筑物。为了保证建筑物的安全&#xff0c;警察署给每个建筑物派了一名警察…

使用 Flask 和 Vue.js 构建 Web 应用

文章目录 入门1. 设置 Flask 后端2. 设置 Vue.js 前端 将 Flask 与 Vue.js 集成1. 配置 Flask 来提供 Vue.js 文件2. 构建 Vue.js 组件3. 运行应用程序 结论 在现代 Web 开发中&#xff0c;创建动态和响应式的应用通常涉及将后端框架如 Flask 与前端库如 Vue.js 结合起来。这种…

深度合作!博睿数据联合中国信通院开展公网服务质量评估工作!

近日&#xff0c;中国信息通信研究院&#xff08;简称“中国信通院”&#xff09;算网质量保障工作全面启动&#xff0c;博睿数据&#xff08;bonree.com&#xff0c;股票代码688229&#xff09;作为信通院算网质量测试独家技术支持单位&#xff0c;提供公网服务质量测评整体解…

新手做抖店该怎么选品?怎么选爆款?选爆品牢记这五大方法

大家好&#xff0c;我是电商花花。 不论之前还是现在&#xff0c;我们做电商想要出单&#xff0c;赚钱&#xff0c;选品对于我们店铺来说都是至关重要的&#xff0c;我们能不能在抖店上赚钱&#xff0c;就看我们的选品&#xff0c;看我们商品选的怎么样了。 如果品选的不错&a…

鸿蒙ArkUI-X跨平台开发:【资源分类与访问】

资源分类与访问 应用开发过程中&#xff0c;经常需要用到颜色、字体、间距、图片等资源&#xff0c;在不同的设备或配置中&#xff0c;这些资源的值可能不同。 应用资源&#xff1a;借助资源文件能力&#xff0c;开发者在应用中自定义资源&#xff0c;自行管理这些资源在不同…

vue/uniapp 企业微信H5使用JS-SDK

企业微信H5需要我们使用一些SDK方法如获取外部联系人userid 获取当前外部联系人userid 使用SDK前提是如何通过config接口注入权限验证配置 使用说明 - 接口文档 - 企业微信开发者中心 当前项目是vue项目&#xff0c;不好直接使用 引入JS文件&#xff0c;但我们可以安装依赖…