JSoup 爬虫遇到的 404 错误解决方案

16云IP.png
在网络爬虫开发中,使用JSoup进行数据抓取是一种常见的方式。然而,当我们尝试使用JSoup来爬虫抓取腾讯新闻网站时,可能会遇到404错误。这种情况可能是由于网站的反面爬虫机制检测到了我们的爬虫行为,从而拒绝了我们的请求。
假设我们希望使用JSoup来爬取腾讯新闻的数据,但在实际操作中,我们却遇到404错误。这可能是因为腾讯新闻网站采取了一些反爬虫措施,例如检测请求头中的用户- Agent信息或者Referer信息,以识别爬虫行为并拒绝请求并返回404错误信息。如下所示:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import java.io.IOException;public class TencentNewsCrawler {public static void main(String[] args) {String url = "http://news.qq.com/not_existing_page"; // 不存在的页面try {Document document = Jsoup.connect(url).get();System.out.println(document.outerHtml());} catch (IOException e) {System.out.println("Error fetching the page: " + e.getMessage());if (e.getMessage().contains("404")) {System.out.println("Encountered 404 error - Page not found");}}}
}

为了解决这个问题,我们可以采取以下几种方法:

  1. 设置合适的请求头:请求头中包含了关于客户端环境和请求的信息,通过设置合适的请求头,我们可以让服务器认为请求来自标准浏览器,从而避免被拒绝或返回404错误。
  2. 模拟浏览器的请求:通过设置合适的User-Agent来模拟浏览器的请求,让服务器认为请求来自标准浏览器,从而避免被拒绝或返回404错误。
  3. 设置Referer信息:有些网站会要求客户端提供特定的Referer信息,即来源页面的URL。通过设置请求头中的Referer字段来模拟请求来源页面的URL,有助于避免被服务器或拒绝返回404错误。
  4. 使用代理服务器:通过使用代理服务器,我们可以隐藏爬虫的真实IP地址,从而降低被网站识别为爬虫的概率。JSoup提供了设置代理的方法,不知道如何设置的可以参考这里https://www.16yun.cn/help/ss_demo/#4java

通过以上方法,我们可以有效地解决 JSoup 爬虫遇到的 404 错误问题,确保爬虫能够正常地获取所需的数据,完整的实现代码示例如下:

import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;import java.io.IOException;public class JsoupCrawlerWithProxy {public static void main(String[] args) {String url = "https://example.com"; // 替换为目标网站的URLString proxyHost = "www.16yun.cn";String proxyPort = "5445";String proxyUser = "16QMSOML";String proxyPass = "280651";try {// 设置合适的User-Agent和Referer,并使用代理服务器Connection connection = Jsoup.connect(url).userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3").referrer("https://www.google.com").proxy(proxyHost, Integer.parseInt(proxyPort)).header("Proxy-Authorization", "Basic " + encodeProxyCredentials(proxyUser, proxyPass));// 发起请求Document document = connection.get();// 处理返回的HTML文档System.out.println(document.title());// 其他处理逻辑...} catch (IOException e) {e.printStackTrace();}}// 编码代理服务器的用户名和密码private static String encodeProxyCredentials(String username, String password) {String credentials = username + ":" + password;return java.util.Base64.getEncoder().encodeToString(credentials.getBytes());}
}

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

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

相关文章

深入探索MongoDB集群模式:从高可用复制集

MongoDB复制集概述 MongoDB复制集主要用于实现服务的高可用性,与Redis中的哨兵模式相似。它的核心作用是数据的备份和故障转移。 复制集的主要功能 数据复制:数据写入主节点(Primary)时,自动复制到一个或多个副本节…

科荣AIO UtilServlet存在任意文件读取漏洞

文章目录 产品简介漏洞概述指纹识别漏洞利用修复建议 产品简介 科荣AIO是一款企业管理软件,提供企业一体化管理解决方案。它整合了ERP(如进销存、财务管理)、OA(办公自动化)、CRM(客户关系管理&#xff09…

Solidworks中子装配不能再总装配中转动

问题: 今天在Solidworks中装配零部件的时候发现,子装配体中能实现的相对转动关系,在总装配体中无法做到。 解决方案: 上网查询,发现解决方案是: 在总装配体导航栏中,在子装配体处点击右键&am…

使用 Postman 实现 API 自动化测试

背景介绍 相信大部分开发人员和测试人员对 postman 都十分熟悉,对于开发人员和测试人员而言,使用 postman 来编写和保存测试用例会是一种比较方便和熟悉的方式。但 postman 本身是一个图形化软件,相对较难或较麻烦(如使用 RPA&am…

新建虚拟环境并与Jupyter内核连接

第一步:在cmd里新建虚拟环境,shap38是新建的虚拟环境的名字 ,python=3.x conda create -n shap38 python=3.8第二步,安装ipykernel,打开anconda powershell prompt: 虚拟环境的文件夹位置,我的如图所示: 进入文件夹并复制地址: 输入复制的文件夹地址更改文件夹:…

Spring实战系列(三)了解容器的基本实现

我们可以通过GitHub或者码云下载spring-framework源码,这边是基于5.X版本进行下载学习的。 地址:https://github.com/spring-projects/spring-framework 分析Spring源码是非常一件的难的事情,只能一步步学习,一步步记录。 前面在…

【负载均衡oj】(四) 运行模块

一.目的 主要负责运行可执行程序。通过文件名就能运行程序。 二.runner run运行模块: 不需要关心运行结果是否正确,只具备基本运行功能并只关心是否运行出错。 一个程序的时候,有三种IO需要关心,标准错误,标准输出&#xff0c…

文献速递:人工智能医学影像分割---一个用于 COVID-19 CT 图像的粗细分割网络

01 文献速递介绍 如今,根据国家癌症研究所的报告,美国约有9.9%的男性患有前列腺癌。1 此外,根据美国癌症协会的数据,预计2019年将有174,650个新病例被诊断出前列腺癌,与此同时大约有31,620名男性将死于前列腺癌。因此…

百度CTO王海峰:文心一言用户规模破1亿

▶ 写在前面▶ 飞桨开发者已达1070万▶ 文心一言用户规模破亿,日提问量快速增长 ▶ 写在前面 “文心一言用户规模突破 1 亿。”12 月 28日,百度首席技术官、深度学习技术及应用国家工程研究中心主任王海峰在第十届 WAVE SUMMIT 深度学习开发者大会上宣布…

AtCoder Beginner Contest 334

B - Christmas Trees 分析&#xff1a; 讨论三种情况 1&#xff09; l<a<r 2&#xff09;a<l 3&#xff09;a>r 虽然简单&#xff0c;但是坑还是有一些的 例如2的策略是&#xff0c;[a,r]的树 - [a,l]的树&#xff0c;然后要注意 l 点有没有树&#xff0c;如…

要学习openfoam,c++需要掌握到什么程度?

要学习openfoam&#xff0c;c需要掌握到什么程度&#xff1f; 在开始前我有一些资料&#xff0c;是我根据自己从业十年经验&#xff0c;熬夜搞了几个通宵&#xff0c;精心整理了一份「c的资料从专业入门到高级教程工具包」&#xff0c;点个关注&#xff0c;全部无偿共享给大家&…

2023年12月27日学习记录_加入噪声

目录 1、今日计划学习内容2、今日学习内容1、add noise to audio clipssignal to noise ratio(SNR)加入 additive white gaussian noise(AWGN)加入 real world noises 2、使用kaggel上的一个小demo&#xff1a;CNN模型运行时出现的问题调整采样率时出现bug 3、明确90dB下能否声…

从 Linux Crontab 到 K8s CronJob,定时任务正在经历怎样的变革

作者&#xff1a;黄晓萌(学仁) 背景 Job 表示短周期的作业&#xff0c;定时 Job 表示按照预定的时间运行Job&#xff0c;或者按照某一频率周期性的运行 Job。比如&#xff1a; 许多传统企业使用 Linux 自带的 crontab 来做定时任务的方案&#xff0c;该方案非常简单&#xff…

docker学习笔记02-安装mysql

1.安装mysql8 下载MySQL镜像 docker pull mysql:8.0创建并启动容器 docker run -itd --name mysqltest -p 9999:3306 -e MYSQL_ROOT_PASSWORD123456 mysql其中-it是交互界面 -d是后台执行 -name 指定容器名称 -p指定映射端口 -e设置环境变量 最后mysql是镜像名或者用镜像id如…

最新云渲染平台选择,云渲染避免踩坑指南

​随着云计算技术的飞速发展&#xff0c;云渲染逐步成为各类行业的优选工具&#xff0c;它凭借出色的效能和强大的并行计算能力&#xff0c;显著提高了工作效率&#xff0c;然而&#xff0c;要想充分利用云渲染技术&#xff0c;选择一款合适的云渲染平台是刻不容缓的课题&#…

一种删除 KubeSphere 中一直卡在 Terminating 的 Namespace--KubeSphere Logging System的简单方法

文章目录 一、问题提出二、删除方法1&#xff0c;获取kubesphere-logging-syste的详细信息json文件2&#xff0c;编辑kubesphere-logging-system.json3&#xff0c;执行清理命令 三、检查结果 一、问题提出 在使用 KubeSphere 的时候发现有一个日志服务KubeSphere Logging Sys…

React快速入门之交互性

响应事件 创建事件处理函数 处理函数名常以handle事件名命名 function handlePlayClick() {alert(Playing);}传递事件处理函数 函数名、匿名两种方式&#xff01; function PlayButton() {function handlePlayClick() {alert(Playing);}return (<Button handleClick{handl…

网站显示不安全警告怎么办?消除网站不安全警告超全指南

网站显示不安全警告怎么办&#xff1f;当用户访问你的网站&#xff0c;而您的网站没有部署SSL证书实现HTTPS加密时&#xff0c;网站就会显示不安全警告&#xff0c;这种警告&#xff0c;不仅有可能阻止用户继续浏览网站&#xff0c;影响网站声誉&#xff0c;还有可能影响网站在…

Android 8.1 设置USB传输文件模式(MTP)

项目需求&#xff0c;需要在电脑端adb发送通知手机端接收指令&#xff0c;将USB的仅充电模式更改成传输文件&#xff08;MTP&#xff09;模式&#xff0c;便捷用户在我的电脑里操作内存文件&#xff0c;下面是我们的常见的修改方式 1、android12以下、android21以上是这种方式…

纸质版表格怎么用扫描仪转换成电子版表格

要将纸质版表格转换成电子版表格&#xff0c;可以使用以下步骤&#xff1a; 1、准备一台物理扫描仪并与电脑连接好&#xff0c;并安装好驱动。 2、打开安装好的金鸣表格文字识别电脑客户端。 3、点击“扫描文件”&#xff0c;在弹出的对话框中选中需要使用的扫描仪。 4、点击“…