首页
技术小册
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.1 代理的设置 在网络爬虫的开发过程中,代理(Proxy)的设置是一个重要且常用的技术手段。它不仅能帮助爬虫绕过IP地址封锁,提高爬取效率,还能在一定程度上保护爬虫服务器的真实IP地址不被暴露,增强爬虫的安全性。本章将深入探讨代理的概念、类型、配置方法及其在Python爬虫中的应用。 ##### 9.1.1 代理的基本概念 代理服务器(Proxy Server)是一种位于客户端和目标服务器之间的服务器,它接收客户端的请求,并将请求转发给目标服务器,同时将目标服务器的响应返回给客户端。在爬虫场景中,使用代理服务器可以隐藏或改变请求的来源IP地址,使得目标网站难以识别并限制爬虫的活动。 ##### 9.1.2 代理的类型 代理服务器根据功能和用途的不同,可以分为多种类型,其中与爬虫开发密切相关的主要有以下几种: 1. **HTTP/HTTPS代理**:最常见也是最常用的代理类型,适用于HTTP和HTTPS协议的请求。HTTP代理仅处理HTTP协议的请求,而HTTPS代理能够处理加密的HTTPS请求。 2. **透明代理**:客户端通过透明代理发送请求时,目标服务器能够识别出该请求是通过代理转发的,并能获取到客户端的真实IP地址。 3. **匿名代理**:与透明代理不同,匿名代理能够隐藏客户端的真实IP地址,但目标服务器仍然能识别到请求是通过代理发出的。 4. **高匿代理**:高匿代理不仅隐藏了客户端的真实IP地址,还能让目标服务器无法识别出请求是通过代理转发的,增强了匿名性。 5. **SOCKS代理**:SOCKS代理是一种更通用的代理协议,支持多种网络协议,包括TCP/UDP等,不仅限于HTTP/HTTPS协议。SOCKS代理的灵活性更高,但配置和使用也相对复杂。 ##### 9.1.3 代理的获取 在爬虫开发中,免费代理和付费代理是两种常见的获取方式。 - **免费代理**:网络上存在许多提供免费代理的网站或服务,但免费代理往往存在速度慢、稳定性差、存活时间短等问题,且可能包含恶意代码或陷阱,使用时需要谨慎。 - **付费代理**:付费代理通常提供更稳定、更快速的服务,且支持更多高级功能,如API接口、自动切换IP等。虽然需要一定的成本投入,但对于需要高效、稳定爬取数据的项目来说,付费代理是更好的选择。 ##### 9.1.4 Python中使用代理 在Python中,使用代理主要通过修改HTTP请求的头信息来实现。以最常用的`requests`库为例,可以通过`proxies`参数来设置代理。 ```python import requests # 代理服务器地址,格式为 {'协议':'代理地址:端口'} proxies = { 'http': 'http://代理IP:端口', 'https': 'https://代理IP:端口', } # 发送请求时带上proxies参数 response = requests.get('http://example.com', proxies=proxies) print(response.text) ``` 如果使用的是SOCKS代理,则可以通过安装`socks`或`PySocks`库,并结合`requests`的`Session`对象来配置。 ```python import requests from requests.adapters import HTTPAdapter from requests.packages.urllib3.util.retry import Retry from requests_socks import SOCKSProxyManager # 创建带有重试机制的Session对象 session = requests.Session() retries = Retry(total=5, backoff_factor=0.1, status_forcelist=[500, 502, 503, 504]) session.mount('http://', HTTPAdapter(max_retries=retries)) session.mount('https://', HTTPAdapter(max_retries=retries)) # 设置SOCKS代理 socks_proxy = SOCKSProxyManager('socks5://代理IP:端口') session.mount('http://', socks_proxy) session.mount('https://', socks_proxy) # 发送请求 response = session.get('http://example.com') print(response.text) ``` ##### 9.1.5 代理池的使用 为了进一步提高爬虫的效率和稳定性,通常会使用代理池(Proxy Pool)来管理多个代理IP。代理池可以自动检测代理的可用性,并在请求时动态分配代理IP,避免单个代理因频繁请求而被封锁。 构建代理池的方法有多种,包括手动维护一个代理IP列表,或者使用现成的代理池服务。对于大型项目,还可以考虑自己搭建代理池系统,通过爬虫定期从网络上抓取可用的代理IP,并验证其有效性后存入数据库或缓存中供使用。 ##### 9.1.6 注意事项 - **遵守法律法规**:在使用代理进行网络爬虫开发时,务必遵守相关法律法规,尊重目标网站的爬虫协议(robots.txt),不得非法爬取、存储、传播敏感信息。 - **合理使用代理**:过度依赖代理可能会导致代理服务器负担过重,甚至被封禁。因此,应合理控制请求频率,避免对目标网站造成不必要的负担。 - **代理质量**:在选择和使用代理时,要注意代理的质量,包括速度、稳定性、匿名性等。低质量的代理可能会导致请求失败或被封禁。 - **异常处理**:在使用代理时,可能会遇到各种异常情况,如代理IP失效、网络波动等。因此,在代码中要做好异常处理,确保程序的健壮性。 - **安全性**:由于代理服务器可能由第三方提供,因此在使用过程中要注意安全性问题,避免泄露敏感信息或遭受攻击。 通过本章的学习,读者应能够掌握代理的基本概念、类型、获取方式以及在Python爬虫中的使用方法。同时,也应了解代理池的概念和构建方法,以及在使用代理时需要注意的事项。这些知识和技能将为后续的爬虫开发提供有力的支持。
上一篇:
8.6 手机验证码的自动化处理
下一篇:
9.2 代理池的维护
该分类下的相关小册推荐:
Python合辑5-格式化字符串
Python编程轻松进阶(五)
Python爬虫入门与实战开发(上)
Python合辑6-字典专题
Python爬虫入门与实战开发(下)
Python3网络爬虫开发实战(下)
Python合辑3-字符串用法深度总结
Python机器学习基础教程(上)
机器学习算法原理与实战
Python合辑8-变量和运算符
剑指Python(万变不离其宗)
Python合辑10-函数