使用Python爬虫会遇到的问题和解决方法(包含案例)

一、HTTP错误(如403 Forbidden)

问题描述:
当使用requests库发起请求时,可能会遇到HTTP 403 Forbidden错误,这通常意味着服务器理解了请求,但是拒绝执行它。

解决方法:
1.设置headers,模拟浏览器请求。
2.使用代理IP。
3.增加cookies
4.降低请求频率,避免被服务器识别为爬虫。

案例:

import requests
import time,random headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}proxies={'https':'202.123.77.88:7777'}   
cookies=''
url = 'http://example.com' # 替换为实际的目标网站try:response = requests.get(url, headers=headers,proxies=proxies,cookies=cookies)response.raise_for_status() # 如果响应状态码不是200,则抛出HTTPError异常print(response.text)
except requests.exceptions.HTTPError as errh:print("Http Error:", errh)
except requests.exceptions.ConnectionError as errc:print("Error Connecting:", errc)
except requests.exceptions.Timeout as errt:print("Timeout Error:", errt)
except requests.exceptions.RequestException as err:print("OOps: Something Else", err)降低请求频率,是因为真实用户的访问并不会很频繁,因此我们使用随机时间来模拟核心代码如下:
for i in range(5):  response = requests.get("https://example.com";;,headers=headers,proxies=proxies) time.sleep(random.uniform(1.5,3.4))  

 

二、反爬虫机制(如验证码、动态加载数据)

问题描述:
许多网站会采用反爬虫机制,如显示验证码、动态加载数据等,以防止爬虫爬取数据。

解决方法:
使用Selenium或Pyppeteer模拟浏览器操作,处理验证码。
对于动态加载的数据,可以使用Selenium等待数据加载完成后再进行抓取。

案例(Selenium处理动态加载数据):

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECdriver = webdriver.Chrome() # 需要先安装ChromeDriver
driver.get('http://example.com') # 替换为实际的目标网站# 等待某个元素加载完成
wait = WebDriverWait(driver, 10)
element = wait.until(EC.presence_of_element_located((By.ID, "myDynamicElement")))# 接下来可以获取该元素的数据或进行其他操作
print(element.text)driver.quit() # 关闭浏览器以上Selenium代码可以参考之前博文的案例
验证码的话,可以使用简单图片验证码解决方法:
使用Pyppeteer截图:
await page.screenshot({'path': "test.png", "clip": {"x": 300, "y": 10, "width": 1320, "height": dimensions['height']}}) 
然后发给通义千问等一些识别图形的gpt

 

三、网络延迟或不稳定

问题描述:
由于网络原因,可能会导致爬虫在抓取数据时发生延迟或连接中断。

解决方法:
使用重试机制,当发生异常时自动重试。
增加超时时间,避免因为网络延迟导致请求超时。

案例(使用retrying库实现重试机制):

import requests
from retrying import retry@retry(stop_max_attempt_number=3, wait_fixed=1000) # 最多重试3次,每次间隔1秒
def fetch_data(url):response = requests.get(url)response.raise_for_status()return response.texturl = 'http://example.com' # 替换为实际的目标网站
data = fetch_data(url)
print(data)

以上就是使用Python爬虫时可能会遇到的问题和解决方法,希望对你有所帮助!

如果大家还有其他的爬虫伪装方式,欢迎在评论区留言交流!请勿用于非法用途!

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

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

相关文章

Flask框架进阶-Flask流式输出和受访配置--纯净详解版

Flask流式输出🚀 在工作的项目当中遇到了一种情况,当前端页面需要对某个展示信息进行批量更新,如果直接将全部的数据算完之后,再返回更新,则会导致,前端点击刷新之后等待时间过长,开始考虑到用进…

【C++】C++ 11 新特性:使用示例

文章目录 C 11 新特性变量类型推导 auto表达式类型推导 decltype初始化列表基于范围的for循环Lambda 表达式智能指针空指针nullptr左值右值移动语义和完美转发常量表达式 constexpr委托构造函数继承构造函数overridefinal并发编程正则表达式 C 11 新特性 以下内容给出C11部分新…

liceo靶机复现

liceo-hackmyvm 靶机地址:https://hackmyvm.eu/machines/machine.php?vmLiceo 本机环境:NAT模式下,使用VirtualBox 信息收集: 首先局域网内探测靶机IP 发现IP为10.0.2.4 开启nmap扫描一下看看开了什么端口 扫描期间看一下web页…

粤嵌gec6818开发板-驱动usb摄像头

前段时间做了一个项目,用到了linux环境下gec6818开发板驱动usb摄像头,在这里给大家分享一下。 摄像头的操作步骤 1)打开设备 2)配置设备(采集的频率、图像宽高、图像格式) 3)在内核空间申请缓冲…

[蓝桥杯2024]-PWN:fd解析(命令符转义,标准输出重定向,利用system(‘$0‘)获取shell权限)

查看保护 查看ida 这里有一次栈溢出,并且题目给了我们system函数。 这里的知识点没有那么复杂 方法一(命令转义): 完整exp: from pwn import* pprocess(./pwn) pop_rdi0x400933 info0x601090 system0x400778payloa…

78、贪心-跳跃游戏

思路 方法1: canJump01 - 使用递归(回溯法) 这个方法是通过递归实现的,它从数组的第一个位置开始,尝试所有可能的跳跃步数,直到达到数组的最后一个位置或遍历完所有的可能性。 思路: 如果数组为空或者长…

【docker】docker compose 搭建私服

安装 Docker Registry 创建目录 mkdir -pv /usr/local/docker/registrymkdir -pv /usr/local/docker/data 创建 docker-compose.yml文件 进入目录创建docker-compose.yml cd /usr/local/docker/registrytouch docker-compose.yml 编辑docker-compose.yml vim docker-compo…

2024年【起重机械安全管理】考试内容及起重机械安全管理操作证考试

题库来源:安全生产模拟考试一点通公众号小程序 起重机械安全管理考试内容根据新起重机械安全管理考试大纲要求,安全生产模拟考试一点通将起重机械安全管理模拟考试试题进行汇编,组成一套起重机械安全管理全真模拟考试试题,学员可…

52.HarmonyOS鸿蒙系统 App(ArkTS)配置文件添加多个权限方法

52.HarmonyOS鸿蒙系统 App(ArkTS)配置文件添加多个权限方法 module.json5

VS2022 嘿嘿

还是大二的时候就开始用这个,但居然是为了用PB,-_-|| 用了段时间换成了C#,依稀还记得大佬们纠正我的读法,别读C井,应该读C夏普。。。 安装过程其实也没啥,就是关键Key得花时间找,我好不容易搞…

Concise CoT(CCoT)提示词工程

原文地址:concise-chain-of-thought-ccot-prompting 2024 年 1 月 24 日 传统的 CoT 是以增加输出令牌使用为代价的,CCoT 提示是一种提示工程技术,旨在减少 LLM 响应的冗长和推理时间。 基于LLMs的生成式人工智能应用程序必须使用多管齐下的方…

【Linux】理解 Ubuntu 中的 kill 和 killall 命令

我把我唱给你听 把你纯真无邪的笑容给我吧 我们应该有快乐的 幸福的晴朗的时光 我把我唱给你听 用我炙热的感情感动你好吗 岁月是值得怀念的留恋的 害羞的红色脸庞 谁能够代替你呀 趁年轻尽情的爱吧 最最亲爱的人啊 路途遥远我们在一起吧 🎵 叶…

php使用Canal监听msyql

canal需要java8 去官网下载java8 安装JAVA #创建目录 mkdir -p /usr/local/java/ #解压到目录 tar zxvf jdk-8u411-linux-x64.tar.gz -C /usr/local/java/配置环境变量在 /etc/profile 最后加入 export JAVA_HOME/usr/local/java/jdk1.8.0_411 export CLASSPATH.:$JAVA_HOM…

【ZZULIOJ】1092: 素数表(函数专题)(Java)

目录 题目描述 输入 输出 样例输入 Copy 样例输出 Copy code 题目描述 输入两个正整数m和n,输出m和n之间的所有素数。 要求程序定义一个prime()函数和一个main()函数,prime()函数判断一个整数n是否是素数,其余功能在main()函数中实现。…

牛客NC320 装箱问题【中等 动态规划,背包问题 C++/Java/Go/PHP】

题目 题目链接: https://www.nowcoder.com/practice/d195a735f05b46cf8f210c4ad250681c 几乎完全相同的题目: https://www.lintcode.com/problem/92/description 思路 动态规划都是递归递推而来。php答案是动态规划版本,递归版本有 测试用…

uint32_t与int区别与联系

1.背景介绍 在一些程序中经常看到uint8_t uint32_t等数据类型,那么它与我们常见的int类型有什么区别呢。 2.协议介绍 stdint.h头文件是为了代码的可移植性而推出的,C99中就已经规范了。 3.代码可移植性 3.1 数据类型的差异 大部分的32位系统采用的…

基于Java+SpringBoot+Mybaties-plus+Vue+elememt+hadoop + redis 医院就诊系统 设计与实现

一.项目介绍 前端:患者注册 、登录、查看首页、医生排班、药品信息、预约挂号、就诊记录、电子病历、处方开药、我的收藏 后端分为: 医生登录:查看当前排班信息、查看患者的挂号情况、设置患者就诊记录、电子病历、给患者开药和个人信息维护 …

公共交通无障碍设施:科技翅膀助力盲人出行新飞跃

在城市的脉络中,公共交通扮演着连接每一个角落的重要角色。然而,对于视力受限的盲人朋友而言,这幅繁忙而复杂的交通网络往往隐藏着诸多不易察觉的障碍。值得庆幸的是,随着公共交通无障碍设施的不断完善,以及高科技辅助…

20240502给NanoPi的NEO core开发板编译移远的4G模块的上网程序quectel-CM

20240502给NanoPi的NEO core开发板编译移远的4G模块的上网程序quectel-CM 2024/5/2 16:29 1、默认编译为AMD64/INTEL的x64架构的可执行文件: rootrootrootroot-ThinkBook-16-G5-IRH:~$ rootrootrootroot-ThinkBook-16-G5-IRH:~$ unzip Quectel_QConnectManager_Lin…

CSS-复合选择器

作用&#xff1a; 后代选择器&#xff1a; 子代选择器 并集选择器 用逗号隔开&#xff0c;在style里面写的时候&#xff0c;每一个标签空一行。 <title>Document</title><style>p,div,span{color: aqua;}</style> </head> <body><p>…