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);
 
        // 创建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中即可

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Raven2掠夺者2渡鸦2游戏预约注册教程 账号注册教程

《渡鸦2》是一款源自韩国的创新力作&#xff0c;作为《Raven》系列的最新续篇&#xff0c;这款游戏在MMORPG手游领域内再度扩展了其标志性的暗黑奇幻宇宙&#xff0c;融入了大量革新的游戏设计与丰富内容。定档于2024年5月29日开启公测的《渡鸦2》&#xff0c;正处在紧张刺激的…

华语电影新力量用短片讲述:一部好电影,影响深远

近日&#xff0c;上汽大众杯澳涞坞全球青年电影短片大赛的公益短片《首映》在澳门澳涞坞首映发布&#xff0c;这一作品不仅展示了电影人的真实生活&#xff0c;更深刻地传达了对华语电影的敬意以及对青年电影人的殷切期望。 短片《首映》的制作团队堪称豪华。资深导演杨枫担任…

数据结构的希尔排序(c语言版)

一.希尔排序的概念 1.希尔排序的基本思想 希尔排序是一种基于插入排序算法的优化排序方法。它的基本思想如下: 选择一个增量序列 t1&#xff0c;t2&#xff0c;......&#xff0c;tk&#xff0c;其中 ti > tj, 当 i < j&#xff0c;并且 tk 1。 按增量序列个数k&#…

HCIP的学习(25)

VLAN间通讯技术 使用多臂路由的方式 ​ 路由器的物理接口默认是不识别802.1Q标签的&#xff0c;所以&#xff0c;交换机连接路由器的接口在发送数据帧时&#xff0c;应该将标签剥离。----一般常使用Access接口配置。 单臂路由 ​ 所谓的单臂路由&#xff0c;实际上试讲路由器…

新书速览|Golang+Vue.js商城项目实战

架构师一步一步教你做项目&#xff0c;从架构设计到技术实现完整解析 本书内容 《GolangVue.js商城项目实战》以Gin和Vue.js为核心框架&#xff0c;以全栈商城项目开发为主线&#xff0c;详尽介绍前后端分离架构开发Web网站项目的关键阶段和技术细节。全书共9章&#xff0c;第…

IGMP——组播成员端网络协议

目录 一.IGMP基本概念 &#xff08;1&#xff09;组播转发困境 &#xff08;2&#xff09;感知组播成员方式 &#xff08;3&#xff09;IGMP版本 二.IGMP各版本的区别与联系 &#xff08;1&#xff09;IGMPV1 1.普遍组查询报文 2.成员关系报告报文 3.IGMPV1报文格式 4…

手撕C语言题典——返回倒数第 k 个节点(面试题)

前言 依旧力扣&#xff0c;这道题之前有做过类似的题&#xff0c;今天给一个新的思路去做&#xff0c;应对面试时候遇到的奇奇怪怪的问题 面试题 02.02. 返回倒数第 k 个节点 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/kth-node-from-end-of-list-…

display ospf routing类型字段:Transit、Stub(区域内部)与Type2

4. B 通过 display ospf routing 命令可显示本路由器中 OSPF 路由表的信息。 其中的路由条目中 &#xff0c; 包含了 到区域内与本路由器直连 (邻居 )的路由器的路由 (TypeTransit) 、 到区域内与本路由器不直连的路由器的路由 (Type-Stub) 、 到自治系统内其它区域的路由(…

Golang | Leetcode Golang题解之第103题二叉树的锯齿形层序遍历

题目&#xff1a; 题解&#xff1a; func zigzagLevelOrder(root *TreeNode) (ans [][]int) {if root nil {return}queue : []*TreeNode{root}for level : 0; len(queue) > 0; level {vals : []int{}q : queuequeue nilfor _, node : range q {vals append(vals, node.V…

Servlet跳转404(解决)

1.解决无法跳转的404问题&#xff08;最根本&#xff0c;最重要&#xff09; 查看Project Structure&#xff0c;检查你的JDK版本不要选错版本&#xff1b; 2.页面跳转&#xff0c;url栏输入的是web.xml中的url-pattern内容&#xff0c;请仔细检查 3.关于配置信息Applicatio…

jQuery下载教程

官网&#xff1a;https://jquery.com/ ** ** 点击为压缩版本 将网站打开 界面上邮件保存为js文件即可 在html文件中引入即可 <html> <head></head> <body><script src"./js/jquery-3.6.3.js"> </script> </body> <…

卧槽!这项目开源了!【送源码 】

随着科技的飞速发展&#xff0c;个人财务管理变得越来越重要。一个名为‘Maybe’的创新型个人财务与财富管理应用程序随之诞生&#xff0c;它以其丰富的功能和用户友好的界面受到了广大用户的关注。 现在项目方将这个价值 100万美元的个人理财应用项目开源了 Maybe Maybe应用…

短剧解说一键生成原创文案的快速方法

如今短剧创作火的一塌糊涂&#xff0c;它们以其简洁明了的剧情、生动有趣的角色和紧凑的节奏&#xff0c;吸引了大量观众的关注。因此&#xff0c;它所带来的流量是非常巨大&#xff0c;不少人将流量的获取瞄准了短剧创作领域以及短剧解说领域。而对于短剧解说人员来讲&#xf…

网工内推 | 高校、外企网工,IE认证优先,年薪最高18w

01 上海外国语大学贤达经济人文学院 &#x1f537;招聘岗位&#xff1a;高校网络主管 &#x1f537;职责描述&#xff1a; 1、负责总机房、网络规划及管理&#xff0c;包括容量规划、成本评估、建设管理等; 2、负责设计、实施及维护全网络架构及规划网络变更计划 3、负责网络功…

Linux下的权限

目录 1.shell命令以及运行原理 1.1原理上初步理解shell外壳 1.1.1为什么要有shell外壳 1.1.2shell外壳是什么 1.1.3怎么办&#xff08;shell外壳的基本运行原理&#xff09; 2.Linux下的用户 3.Linux权限管理 3.1.文件访问者的分类&#xff08;人&#xff09; 3.2…

C语言 数组—— 一维数组下标越界问题分析

目录 数组元素的访问 一维数组元素的越界访问 二维数组元素的越界访问 小结 数组元素的访问 访问数组元素时&#xff0c; 下标越界 是大忌&#xff01;  编译器通常不检查下标越界&#xff0c;导致程序运行时错误  下标越界&#xff0c;将访问数组以外的空间  …

vscode插件-03 PHP

PHP Intelephense 如果php在远程计算机上&#xff0c;要把插件安装在远程&#xff0c;而不是本地。 这个插件&#xff0c;要求php版本大于7&#xff0c;且设置环境变量&#xff08;好像不一定要设置&#xff09;。 设置里面搜索php.executablePath&#xff0c;打开setting.js…

element-ui 实现输入框下拉树组件(2024-05-23)

用element-ui的 el-input&#xff0c;el-tree&#xff0c;el-popover组件组合封装 import url("//unpkg.com/element-ui2.15.14/lib/theme-chalk/index.css"); <script src"//unpkg.com/vue2/dist/vue.js"></script> <script src"//…

索引下推详情-简单入手

一.概念 索引下推&#xff08;Index Pushdown&#xff09;MySQL5.6添加的&#xff0c;是一种优化技术&#xff0c;用于在查询执行时将部分计算移动到存储引擎层&#xff0c;从而减少数据传输和计算的开销&#xff08;减少回表查询次数&#xff09;&#xff0c;提高查询性能。 …

【软件工程】【23.04】p1

关键字&#xff1a; 软件模型、提炼、加工表达工具、通信内聚、访问依赖、边界类交互分析、RUP核心工作流、首先测试数据流、软件验证过程、CMMI过程域分类工程类&#xff1b; 软件工程目的、功能需求是需求的主体、结构化方法、耦合、详细设计工具、类、类图、RUP采用用例技…