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

embedded/2024/10/19 3:35:40/

一、HTTP错误(如403 Forbidden)

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

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

案例:

python">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处理动态加载数据):

python">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库实现重试机制):

python">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.ppmy.cn/embedded/28122.html

相关文章

如何基于Zookeeper实现注册中心模型?

在分布式系统中,通常会存在几十个甚至上百个服务,开发人员可能甚至都无法明确系统中到底有哪些服务正在运行。另一方面,我们很难同时确保所有服务都不出现问题,也很难保证当前的服务部署方式不做调整和优化。由于自动扩容、服务重…

每日一题(力扣198):打家劫舍--dp

考虑到达第n家房屋时,偷偷这家的钱 :1 如果不偷,那么当前最大值是前n-1家房屋中可以偷的最多的钱 2 如果偷 ,那就是这家的钱 +前n-2家房屋可以偷的最多的钱。(从数组的结果值考虑,不然容易绕进去…

算法二:DOM - 将DOM节点元素转换成JSON字符串

题目&#xff1a; 将DOM节点元素转换成JSON的格式 例如 <div class"root"><div class"child1"><p></p></div><span></span><div><div><p></p></div></div><p></…

centos学习- ps命令详解-进程监控的利器

ps命令详解&#xff1a;Linux进程监控的利器 在Linux系统管理中&#xff0c;进程监控是一个至关重要的环节。ps命令是Linux系统中一个功能强大的进程查看工具&#xff0c;通过它可以获取当前系统中所有进程的快照信息&#xff0c;并深入了解各个进程的详细信息。结合其各种选项…

蓝桥杯如何准备国赛?

目录 一、赛前准备 1、如何刷题&#xff0c;刷哪些题&#xff1f; 2、记录&#xff08;主要看个人习惯&#xff09; CSDN博客 写注释 3、暴力骗分 4、从出题人的角度出发&#xff0c;应该如何骗分 二、赛中注意事项 一、赛前准备 1、如何刷题&#xff0c;刷哪些题&…

Java 使用 Maven 编译时插件提示 拷贝错误

提示的具体信息为&#xff1a; [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.3.1:resources (default-resources) on project core-java-8: filtering C:\WorkDir\Repository\iSharkfly-Docs\java-tutorials\core-java-modules\core-jav…

Rust入门

rust 入门 官网 Rust 程序设计语言 (rust-lang.org) 安装 官网下载Rustup执行安装Visual Studio&#xff0c;勾选C桌面开发选项&#xff08;window环境&#xff09; helloworld 创建项目 cargo new hello 编译 cargo build 执行 target/debug目录下 hello.exe 类型…

WSL2-Ubuntu使用Conda配置百度飞浆paddlepaddle虚拟环境

0x00 缘起 本文将介绍在WSL2-Ubuntu系统中,使用Conda配置百度飞浆paddlepaddle虚拟环境中所出现的各种问题以及解决方法,最终运行"run_check()"通过测试。 在WSL2中配置paddlepaddle不像配置Pytorch那样顺滑,会出现各种问题(如:库的文件缺失、不知道如何匹配C…