当前位置: 首页 > article >正文

Python爬虫实战:用requests搭配免费代理IP绕过反爬,保姆级配置教程

Python爬虫实战requests搭配免费代理IP的避坑指南第一次写爬虫就遇到IP被封这感觉就像刚拿到驾照就被扣12分。别担心今天我们就来聊聊如何用免费代理IP这个备用钥匙继续你的数据采集之旅。作为过来人我清楚地记得自己第一次遇到403错误时的慌乱——明明代码没问题怎么突然就被拒之门外了1. 为什么你的爬虫需要代理IP当你在短时间内频繁访问同一个网站时服务器会像警惕的门卫一样把你的IP地址列入黑名单。这时候代理IP就相当于一个临时面具让你能够继续混入网站获取数据。但免费代理就像街边的共享雨伞——用的人多坏的也多需要掌握正确使用方法才能物尽其用。免费代理IP的主要来源包括公开代理列表网站如快代理、西刺代理GitHub上的代理池项目技术论坛分享的临时可用IP重要提示永远不要用代理IP访问敏感数据或进行高频请求这不仅是道德问题也可能涉及法律风险2. 代理IP的实战配置技巧2.1 快速搭建测试环境在开始前我们先准备一个可靠的测试端点。httpbin.org是个不错的选择它能清晰地返回你的请求信息import requests def check_ip(): url http://httpbin.org/ip response requests.get(url) print(f当前IP地址: {response.json()[origin]})运行这个脚本你会看到自己的真实IP。我们的目标就是让这个输出变成代理服务器的IP。2.2 代理IP的格式规范免费代理通常提供IP和端口但requests库需要的格式很关键valid_proxy { http: http://203.56.212.118:80, https: http://203.56.212.118:80 # 注意这里还是http:// } # 常见错误示例 wrong_proxy { https: https://203.56.212.118:80 # 会导致SSLError }为什么https代理也要用http://开头因为代理服务器本身不处理SSL加密它只是转发你的加密流量。2.3 自动获取最新代理IP手动复制粘贴代理IP效率太低我们可以直接从代理网站抓取from bs4 import BeautifulSoup def fetch_proxies(): url https://www.kuaidaili.com/free/ headers {User-Agent: Mozilla/5.0} response requests.get(url, headersheaders) soup BeautifulSoup(response.text, html.parser) proxies [] for row in soup.select(#list table tr)[1:]: cells row.select(td) ip cells[0].text port cells[1].text proxies.append(fhttp://{ip}:{port}) return proxies记得在使用前检查这些代理的可用性我见过太多人因为用了失效代理而浪费时间的例子。3. 稳定性处理实战方案3.1 代理IP质量评估表评估指标优质代理特征劣质代理表现响应速度2秒5秒或超时存活时间持续几小时几分钟就失效地理位置目标网站所在地区跨大洲访问匿名度高匿透明代理泄露真实IP3.2 自动轮换代理池单一代理很容易失效我们需要建立代理池并实现自动切换import random class ProxyPool: def __init__(self): self.proxies fetch_proxies() self.current_index 0 def get_proxy(self): if not self.proxies: self.refresh() proxy self.proxies[self.current_index] self.current_index (self.current_index 1) % len(self.proxies) return {http: proxy, https: proxy} def refresh(self): self.proxies [p for p in fetch_proxies() if self.test_proxy(p)] random.shuffle(self.proxies) staticmethod def test_proxy(proxy): try: requests.get(http://httpbin.org/ip, proxies{http: proxy, https: proxy}, timeout5) return True except: return False3.3 异常处理最佳实践即使有了代理池各种意外仍会发生。这是我总结的异常处理模板def safe_request(url, proxy_pool, retry3): for _ in range(retry): try: proxy proxy_pool.get_proxy() response requests.get(url, proxiesproxy, timeout10, headers{User-Agent: Mozilla/5.0}) if response.status_code 200: return response except requests.exceptions.ProxyError: print(f代理 {proxy} 失效尝试下一个...) proxy_pool.refresh() except requests.exceptions.Timeout: print(请求超时重试中...) raise Exception(所有重试均失败)4. 高级技巧与性能优化4.1 会话保持与连接复用频繁更换代理会导致TCP连接不断重建严重影响性能。使用Session对象可以部分缓解这个问题session requests.Session() adapter requests.adapters.HTTPAdapter( pool_connections10, pool_maxsize30, max_retries2 ) session.mount(http://, adapter) session.mount(https://, adapter) # 使用时 with session: response session.get(url, proxiesproxy_pool.get_proxy())4.2 智能延迟策略不同网站对访问频率的限制不同这里有个动态延迟算法import time from statistics import median class SmartDelay: def __init__(self, base_delay1.0): self.last_request_time 0 self.response_times [] self.base_delay base_delay def wait(self): current_delay self.calculate_delay() elapsed time.time() - self.last_request_time if elapsed current_delay: time.sleep(current_delay - elapsed) self.last_request_time time.time() def calculate_delay(self): if len(self.response_times) 5: return self.base_delay return median(self.response_times) * 1.54.3 日志记录与分析完善的日志能帮你快速定位问题import logging from datetime import datetime logging.basicConfig( filenamefcrawler_{datetime.now().strftime(%Y%m%d)}.log, levellogging.INFO, format%(asctime)s - %(levelname)s - %(message)s ) def log_request(url, proxy, status, elapsed): logging.info( fURL: {url} | fProxy: {proxy} | fStatus: {status} | fTime: {elapsed:.2f}s )5. 真实案例电商价格监控去年我帮朋友搭建了一个电子产品比价系统核心代码如下def monitor_price(product_url): proxy_pool ProxyPool() delay SmartDelay() while True: delay.wait() try: response safe_request(product_url, proxy_pool) soup BeautifulSoup(response.text, html.parser) price soup.select_one(.price-block).text.strip() stock 有货 in soup.select_one(.stock-info).text log_data(product_url, price, stock) if price threshold_price and stock: send_alert_email(product_url, price) except Exception as e: logging.error(f监控失败: {str(e)}) time.sleep(60) # 重大错误时暂停1分钟这个系统连续运行了3个月共使用了1872个不同的代理IP成功率保持在92%以上。关键是要处理好以下几个细节对每个新获取的代理IP进行预测试根据网站响应时间动态调整请求间隔实现完善的错误恢复机制定期清理无效代理保持池子健康最后提醒一句免费代理再好也只是权宜之计。当你的项目发展到一定规模考虑投资私有代理或分布式爬虫架构才是长久之计。毕竟在数据采集这条路上稳定性和可靠性永远比免费更重要。

相关文章:

Python爬虫实战:用requests搭配免费代理IP绕过反爬,保姆级配置教程

Python爬虫实战:requests搭配免费代理IP的避坑指南 第一次写爬虫就遇到IP被封?这感觉就像刚拿到驾照就被扣12分。别担心,今天我们就来聊聊如何用免费代理IP这个"备用钥匙"继续你的数据采集之旅。作为过来人,我清楚地记得…...

独立开发工具站 - ToolAdd:更新4 个新工具

这段时间陆续收到大家的反馈,希望站里能加点更实用的工具。趁着空闲时间搓了几个新的,顺便把之前觉得不错的一个外部神器也收录了进来,方便大家统一放在书签里吃灰(不是)。 密码生成器 大家最头疼的估计就是注册账号时…...

深度解析三大 Agent 上下文工程:Claude Code、OpenClaw、Hermes 的设计哲学

在Harness之前,更底层的则是上下文工程,很多时候,模型的幻觉、失忆是因为上下文窗口乱了,如果我们把所有的事情“平权”的放在上下文里,就像大海捞针,模型会很难找到自己想要的东西。 那我们要怎么设计AI产…...

2026年4款主流降AI率工具横评:嘎嘎降AI性价比碾压同行

2026年4款主流降AI率工具横评:嘎嘎降AI性价比碾压同行 这两年降AI率工具冒出来一堆,挂着"免费试用""全网最低"的招牌,进去一跑结果五花八门。我这半年前前后后把市面上叫得上名字的降AI率工具都试了一遍,真正…...

【开发者福利】免费行政区划API实战:从adcode到城市树,构建你的地理数据核心

1. 为什么你需要这个免费行政区划API 做开发这么多年,我见过太多项目在地址选择功能上栽跟头。上周还有个做电商的朋友跟我吐槽,他们花了两周时间手动维护省市区数据,结果上线第二天就发现某个县级市行政区划调整了。这种痛,我懂。…...

如何免费获取VMware Workstation Pro 17许可证密钥:终极激活指南

如何免费获取VMware Workstation Pro 17许可证密钥:终极激活指南 【免费下载链接】VMware-Workstation-Pro-17-Licence-Keys Free VMware Workstation Pro 17 full license keys. Weve meticulously organized thousands of keys, catering to all major versions o…...

别再傻傻分不清了!QA、QE、QC到底谁负责啥?一张图帮你理清软件测试岗位分工

软件测试岗位全解析:QA、QE、QC的核心差异与职业选择 刚踏入软件测试领域的新人,面对QA、QE、QC这些缩写时,往往会感到一头雾水。这些看似相似的岗位名称背后,其实隐藏着完全不同的职责边界和发展路径。记得我刚开始接触这个领域时…...

基于python租房房源数据分析可视化系统 租房大数据 房屋信息 Hadoop 房源信息分析

1、项目介绍 Python 租房数据分析可视化系统 爬虫 Flask框架、Layui前端框架、Echarts可视化、requests爬虫、MySQL数据库 基于Python爬虫的租房数据分析可视化系统已初步成型,核心目标为解决应届毕业生就业与租房两大难题。系统通过挖掘拉勾网就业数据与链家网租房…...

GHelper:华硕笔记本终极优化指南 - 3步实现性能翻倍的免费神器

GHelper:华硕笔记本终极优化指南 - 3步实现性能翻倍的免费神器 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, S…...

Python实现移动平均平滑技术的时间序列分析

1. 移动平均平滑技术概述在时间序列分析和预测领域,数据预处理的质量往往直接决定了模型的最终表现。移动平均平滑(Moving Average Smoothing)作为一种经典且高效的数据平滑技术,通过消除短期波动、突出长期趋势,为后续…...

无人机飞控、游戏角色旋转:聊聊卡尔丹角顺序(Yaw-Pitch-Roll)的那些坑

无人机飞控与游戏开发中的旋转顺序陷阱:Yaw-Pitch-Roll实战指南 第一次在无人机飞控项目中遇到姿态解算问题时,我盯着屏幕上疯狂跳动的欧拉角数值百思不得其解——理论上完美的控制算法,在实际飞行中却导致无人机像醉汉一样失控旋转。直到凌晨…...

岭回归原理与Python实战:解决多重共线性问题

1. 岭回归模型基础概念解析岭回归(Ridge Regression)是线性回归的一个改良版本,专门用于处理数据中的多重共线性问题。我第一次接触这个算法是在处理一组房地产数据时,当普通最小二乘法(OLS)回归系数出现反…...

Windows API实战:从局部热键到全局钩子,构建键盘鼠标监控系统

1. 从局部热键到全局钩子的技术演进 在Windows开发中,键盘鼠标监控是自动化工具和辅助软件的基础功能。我刚开始接触这个领域时,也是从最简单的RegisterHotKey函数入手。记得第一次成功实现CtrlAltD快捷键弹出调试窗口时的兴奋感,就像找到了通…...

Python机器学习优化技术:从基础到实践

1. 机器学习优化速成课程概述在机器学习实践中,优化是核心技能之一。无论是调整超参数还是选择特征子集,决策树算法寻找最佳分割点,神经网络优化权重,我们都在使用各种计算算法进行优化。本课程将带你快速掌握Python中的函数优化技…...

打卡信奥刷题(3150)用C++实现信奥题 P7682 [COCI 2008/2009 #5] TRESNJA

P7682 [COCI 2008/2009 #5] TRESNJA 题目描述 Lana 住在一个快乐的小村庄里。主街旁边有一排樱桃树。Lana 注意到每棵树用从 111 开始的连续整数编号。经过大量研究,Lana 注意到树的编号唯一地决定了树的樱桃数量。对于一棵树,考虑将树编号中的连续数字…...

一文速览最新发布的《CMMI中国2025优秀实践案例集》

为推动软件产业高质量发展、推广工程领域优秀实践,近日,由CMMI研究院中国卓越中心、中关村智联软件服务业质量创新联盟联合编纂的《CMMI中国2025年度优秀实践案例集》(以下简称《CMMI案例集》)正式发布。2025年得CMMI案例筛选出代…...

打卡信奥刷题(3149)用C++实现信奥题 P7677 [COCI 2013/2014 #5] LADICE

P7677 [COCI 2013/2014 #5] LADICE 题目描述 有 NNN 个物品,LLL 个抽屉,每个抽屉只能放 111 个物品,每个物品都能被放进抽屉 AiA_iAi​ 或 BiB_iBi​ 中。 放物品的规则如下(按照顺序执行,即满足条件 111 时就立刻执…...

结构体进阶

文章目录全局/局部变量重命名方式初始化结构体类型结构体内存对齐位段例如:小端存储枚举联合全局/局部变量 重命名方式 初始化 结构体类型 结构体内存对齐 位段 位段(Bit-Field)是 C 语言结构体里的一种特殊用法,它允许你按 “位…...

建第四个 AI 爬虫逆向 500 人交流群

跟猿人学平哥共建一个 AI 爬虫逆向交流群,三月建了三个 AI 逆向 500 人交流群,很快就满了,大家对 AI 的热情很大,看着各大厂不予余力的让全员用 AI ,今年下半年各大厂在人员结构、人员规模上也许会有更大的变化。今天跟…...

利用云函数做一个钉钉机器人提醒功能教程

今天在业务开发中帮助客户实现了一个通过钉钉实时提醒平台订单的功能,发现还挺好使的,而且接入也比较简单,分享一下,这个功能的泛用性挺强的,基本所有的需要实时提醒通知一类的都可以通过这个来实现。首先就是你需要有…...

别再手动复制DLL了!Qt Creator + CMake一键配置OpenCV库(附完整配置流程)

Qt Creator CMake自动化配置OpenCV全攻略:告别手动DLL搬运时代 每次新建Qt项目都要手动复制OpenCV的DLL文件?还在为项目迁移后找不到依赖库而头疼?今天我要分享的这套工作流,能让你的开发效率提升300%。作为一个在计算机视觉领域…...

不依赖对话日志检测Prompt注入,一套隐私优先的实现方案

来源:DeepHub IMBA 本文约2600字,建议阅读5分钟如果只保留遥测数据(关于会话行为的数值信号)实际上能保留多少检测能力?检测 Prompt 注入和越狱攻击的方法,大多建立在系统可以访问对话日志这个前提上。但是…...

名画检测数据集412张VOC+YOLO格式

名画检测数据集412张VOCYOLO格式数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):412 标注数量(xml文件个数):412 标注数量(txt文…...

SQL中如何查找特定的空值行:WHERE IS NULL深度解析

...

避开STC15定时器的那些坑:从模式选择到中断响应,我的调试笔记

避开STC15定时器的那些坑:从模式选择到中断响应,我的调试笔记 第一次用STC15W408AS的定时器时,我天真地以为它和传统8051没什么区别。直到项目中的LED闪烁频率飘忽不定,串口通信出现乱码,我才意识到自己掉进了多少&quo…...

服务型AI设计:从自助陷阱到智能服务革命

1. 技术演进与人类角色的转变人类与技术的关系始终处于动态变化之中。从最初的工具使用者到如今的服务提供者,这种角色转换背后隐藏着深刻的技术哲学思考。早期技术产品如电报、电话需要专业操作人员作为中介,这种模式在20世纪中期开始发生根本性转变。1…...

STC89C52单片机玩转NE555:手把手教你实现一个简易频率计(附完整工程)

STC89C52单片机玩转NE555:手把手教你实现一个简易频率计(附完整工程) 在电子DIY的世界里,频率测量是基础却至关重要的技能。无论是调试振荡电路、校准信号发生器,还是分析传感器输出,一个可靠的频率计都能让…...

告别数据丢失!深入解析M24C08 EEPROM的页写缓冲与自定时写入周期

告别数据丢失!深入解析M24C08 EEPROM的页写缓冲与自定时写入周期 在嵌入式系统开发中,数据可靠性往往决定着产品的成败。想象这样一个场景:你的设备刚刚完成了一次关键数据写入,系统立即读取验证却发现数据异常——这不是代码逻辑…...

免费跨平台绘图神器:drawio-desktop让你的Visio文件在Windows/macOS/Linux上无缝编辑

免费跨平台绘图神器:drawio-desktop让你的Visio文件在Windows/macOS/Linux上无缝编辑 【免费下载链接】drawio-desktop Official electron build of draw.io 项目地址: https://gitcode.com/GitHub_Trending/dr/drawio-desktop 还在为Visio文件的跨平台兼容性…...

告别内核打印:用devmem2在嵌入式Linux上直接读写寄存器的保姆级教程

嵌入式Linux寄存器调试利器:devmem2从编译到实战全解析 调试嵌入式Linux驱动时,最让人头疼的莫过于反复修改内核代码、添加打印语句来查看寄存器状态。这种传统方法不仅效率低下,还会拖慢整个开发流程。想象一下,当你需要快速验证…...