首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
1.1 HTTP基本原理
1.2 Web 网页基础
1.3 爬虫的基本原理
1.4 Session和Cookie
1.5 代理的基本原理
1.6 多线程和多进程的基本原理
2.1 urllib的使用
2.2 requests的使用
2.3 正则表达式
2.4 httpx的使用
2.5 基础爬虫案例实战
3.1 XPath的使用
3.2 Beautiful Soup的使用
3.3 pyquery的使用
3.4 parsel 的使用
4.1 TXT 文本文件存储
4.2 JSON 文件存储
4.3 CSV 文件存储
4.4 MySQL 存储
4.5 MongoDB 文档存储
4.6 Redis缓存存储
4.7 Elasticsearch 搜索引擎存储
4.8 RabbitMQ 的使用
5.1 什么是 Ajax
5.2 Ajax分析方法
5.3 Ajax 分析与爬取实战
6.1 协程的基本原理
6.2 aiohttp的使用
6.3 aiohttp 异步爬取实战
7.1 Selenium 的使用
7.2 Splash 的使用
7.3 Pyppeteer 的使用
7.4 Playwright 的使用
7.5 Selenium 爬取实战
7.6 Pyppeteer 爬取实战
7.7 CSS 位置偏移反爬案例分析与爬取实战
7.8 字体反爬案例分析与爬取实战
8.1 使用 OCR 技术识别图形验证码
8.2 使用 OpenCV 识别滑动验证码的缺口
8.3 使用深度学习识别图形验证码
8.4 使用深度学习识别滑动验证码的缺口
8.5 使用打码平台识别验证码
8.6 手机验证码的自动化处理
9.1 代理的设置
9.2 代理池的维护
9.3 付费代理的使用
9.4 ADSL 拨号代理的搭建方法
9.5 代理反爬案例爬取实战
10.1 模拟登录的基本原理
10.2 基于Session和Cookie的模拟登录爬取实战
10.3 基于JWT的模拟登录爬取实战
10.4 大规模账号池的搭建
11.1 网站加密和混淆技术简介
11.2 浏览器调试常用技巧
11.3 JavaScript Hook 的使用
11.4 无限 debugger 的原理与绕过
11.5 使用 Python 模拟执行 JavaScript
11.6 使用 Node.js 模拟执行 JavaScript
11.7 浏览器环境下 JavaScript 的模拟执行
11.8 AST 技术简介
11.9 使用 AST 技术还原混淆代码
11.10 特殊混淆案例的还原
11.11 WebAssembly 案例分析和爬取实战
11.12 JavaScript 逆向技巧总结
11.13 JavaScript 逆向爬取实战
当前位置:
首页>>
技术小册>>
Python3网络爬虫开发实战(上)
小册名称:Python3网络爬虫开发实战(上)
### 第9章 网络爬虫进阶 #### 9.5 代理反爬案例爬取实战 在网络爬虫的开发过程中,经常会遇到目标网站设置反爬虫机制的情况,其中最常见的一种策略是通过检测访问者的IP地址来识别并阻止爬虫访问。为了绕过这种限制,使用代理(Proxy)成为了一种常用的技术手段。代理服务器能够代替客户端(即爬虫)与目标网站进行通信,从而隐藏或改变爬虫的真实IP地址。本章节将详细介绍如何在实际项目中应用代理技术来绕过反爬虫机制,并给出一个具体的爬取案例。 ##### 9.5.1 代理基础知识 **代理服务器的概念**:代理服务器是一种网络服务器,它可以接受用户的请求并将其转发到目标服务器,然后将目标服务器的响应返回给用户。在这个过程中,用户的真实IP地址对目标服务器是隐藏的,目标服务器看到的是代理服务器的IP地址。 **代理类型**: - **HTTP代理**:最常见的一种代理,用于HTTP和HTTPS协议的通信。 - **SOCKS代理**:不仅支持HTTP和HTTPS,还支持其他协议,如FTP、SMTP等,更加灵活。 **代理的匿名性**: - **透明代理**:目标服务器能够识别出使用了代理,且能获取到用户的真实IP。 - **匿名代理**:目标服务器能识别出使用了代理,但无法获取用户的真实IP。 - **高匿代理**:目标服务器完全无法识别出使用了代理,也无法获取用户的任何信息,最为安全。 ##### 9.5.2 Python中使用代理 在Python中,使用代理进行网络请求,通常会借助`requests`库或`urllib`库结合`socks`模块(对于SOCKS代理)。下面以`requests`库为例,展示如何设置HTTP代理进行请求。 ```python import requests proxies = { 'http': 'http://your_proxy_ip:port', 'https': 'https://your_proxy_ip:port', } url = 'http://example.com' response = requests.get(url, proxies=proxies) print(response.text) ``` 对于SOCKS代理,可以使用`PySocks`(`socks`模块的一个封装)结合`requests`的`Session`对象,但需要安装额外的库如`PySocks`。 ```bash pip install pysocks requests[socks] ``` 然后,可以这样使用SOCKS代理: ```python import requests import socks import socket socks.set_default_proxy(socks.SOCKS5, "your_socks_proxy_ip", port) socket.socket = socks.socksocket session = requests.Session() response = session.get('http://example.com') print(response.text) ``` ##### 9.5.3 代理池的构建与使用 在实际应用中,单一代理很容易被目标网站识别并封禁。因此,构建一个代理池,通过轮换代理IP进行请求,可以大大提高爬虫的存活率。 **构建代理池**: 1. **收集代理**:可以从免费代理网站、购买代理服务或自行搭建代理服务器等方式获取代理IP。 2. **验证代理**:编写脚本对收集到的代理进行验证,确保它们能够正常工作且未被封禁。 3. **存储代理**:将验证通过的代理存入数据库或文件中,便于后续使用。 **使用代理池**: - 每次发起请求前,从代理池中随机或按策略选择一个代理。 - 如果请求失败(如超时、被目标网站封禁),则更换代理重试。 - 定期更新代理池,剔除失效的代理,补充新的代理。 ##### 9.5.4 实战案例:爬取带反爬虫机制的网站 假设我们需要爬取一个使用IP封锁策略的网站`https://protected-website.com`,该网站对同一IP的访问频率有严格限制。下面将展示如何使用代理池来绕过这一限制。 **步骤一:构建代理池** 首先,你需要收集并验证一批代理IP,存入数据库中。这里省略具体实现细节,假设你已经有一个可用的代理池。 **步骤二:编写爬虫代码** ```python import requests from random import choice from db_utils import get_random_proxy # 假设这是从数据库中随机获取一个代理的函数 def fetch_data(url): proxies = {'http': f'http://{get_random_proxy()}'} try: response = requests.get(url, proxies=proxies, timeout=10) response.raise_for_status() # 如果响应状态码不是200,则抛出异常 return response.text except (requests.RequestException, Exception) as e: print(f"请求失败:{e}, 尝试更换代理...") # 这里可以加入重试逻辑,但为简化示例,直接返回None return None def main(): url = 'https://protected-website.com/data' data = fetch_data(url) if data: print("数据获取成功:", data) else: print("数据获取失败,请检查代理池或目标网站状态。") if __name__ == '__main__': main() ``` **注意**:在实际应用中,`get_random_proxy`函数应包含对代理的验证逻辑,确保每次从代理池中取出的代理都是有效的。同时,考虑到网络请求的不确定性,可能需要加入重试机制来增强爬虫的健壮性。 **步骤三:运行与调试** 运行上述爬虫代码,并观察是否能够成功绕过目标网站的反爬虫机制获取到数据。如果遇到问题(如请求超时、代理被封禁等),需要根据实际情况调整代理池、请求间隔等参数。 ##### 9.5.5 总结 使用代理技术绕过反爬虫机制是网络爬虫开发中常用且有效的手段。通过构建并合理使用代理池,可以大大提高爬虫的存活率和数据获取效率。然而,也需要注意代理的合法性和稳定性问题,避免因滥用代理而引发法律风险或影响爬虫的正常运行。同时,随着反爬虫技术的不断进步,开发者需要持续关注并更新自己的爬虫策略,以应对新的挑战。
上一篇:
9.4 ADSL 拨号代理的搭建方法
下一篇:
10.1 模拟登录的基本原理
该分类下的相关小册推荐:
Python合辑6-字典专题
Python面试指南
Python合辑13-面向对象编程案例(上)
Python3网络爬虫开发实战(下)
Python机器学习基础教程(上)
Python与办公-玩转PPT
Python与办公-玩转Excel
Python机器学习实战
Python合辑2-字符串常用方法
Python合辑3-字符串用法深度总结
Python合辑12-面向对象
Python编程轻松进阶(二)