【0基础学爬虫】爬虫基础之代理的基本使用
字数 786 2025-08-11 08:36:09
爬虫基础之代理的使用详解
一、代理概述
代理服务器(Proxy Server)作为客户端与服务端之间的中间层,代替用户与目标服务器进行通信。当使用代理时:
- 服务端获取到的是代理服务器的IP地址
- 实现了真实IP的隐藏
二、代理的主要作用
- 突破访问限制:绕过基于IP地址的访问限制
- 爬虫数据采集:防止爬虫程序被目标网站封禁或限制访问
- 提高网络安全性:隐藏真实IP地址,防止黑客攻击和网络钓鱼
三、代理分类
1. 根据匿名度分类
| 类型 | 别名 | 特点 | 适用场景 |
|---|---|---|---|
| 高匿名代理 | 完全匿名代理 | 完全隐藏客户端真实IP和其他信息,服务端无法识别 | 高安全性要求的场景 |
| 普通匿名代理 | 匿名代理 | 隐藏客户端IP但暴露其他请求信息 | 一般匿名需求 |
| 透明代理 | 普通代理 | 不隐藏任何客户端信息 | 使用较少 |
2. 根据支持协议分类
- HTTP代理:转发HTTP请求,主要用于网页访问
- HTTPS代理:转发HTTPS请求,建立安全通信通道
- FTP代理:转发FTP请求,用于文件传输
- SOCKS代理:通用代理,支持任意类型网络请求
3. 根据地理位置分类
- 国外代理
- 国内代理
四、代理的使用方法
1. 代理格式
普通代理格式:
proxy = {
'https://': 'http://%(ip)s:%(port)s' % {"ip":ip,"port":port},
'http://': 'http://%(ip)s:%(port)s' % {"ip":ip,"port":port}
}
账号密码认证格式:
proxy = {
"http": "http://%(user)s:%(pwd)s@%(ip)s:%(port)s/" % {"user": username, "pwd": password, "ip":ip,"port":port},
"https": "http://%(user)s:%(pwd)s@%(ip)s:%(port)s/" % {"user": username, "pwd": password, "ip":ip,"port":port}
}
2. 各库的代理设置方法
urllib设置代理
import urllib.request
proxy = {
'https': 'http://112.74.202.247:16816',
'http': 'http://112.74.202.247:16816'
}
proxy_handler = urllib.request.ProxyHandler(proxy)
opener = urllib.request.build_opener(proxy_handler)
urllib.request.install_opener(opener)
response = urllib.request.urlopen('http://httpbin.org/get').read().decode('utf-8')
print(response)
requests设置代理
import requests
proxy = {
'https': 'http://112.74.202.247:16816',
'http': 'http://112.74.202.247:16816'
}
url = 'http://httpbin.org/get'
response = requests.get(url, proxies=proxy)
print(response.json())
httpx设置代理
import httpx
proxy = {
'https://': 'http://112.74.202.247:16816',
'http://': 'http://112.74.202.247:16816'
}
url = 'http://httpbin.org/get'
response = httpx.get(url, proxies=proxy)
print(response.json())
httpx Client设置代理
import httpx
proxy = {
'https://': 'http://112.74.202.247:16816',
'http://': 'http://112.74.202.247:16816'
}
with httpx.Client(proxies=proxy) as client:
response = client.get('https://httpbin.org/get')
print(response.json())
aiohttp设置代理
import aiohttp
import asyncio
async def main():
async with aiohttp.ClientSession() as session:
async with session.get('https://httpbin.org/get', proxy=proxy) as response:
print(await response.json())
if __name__ == "__main__":
proxy = "http://112.74.202.247:16816"
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
websocket设置代理
方法一:
from websocket import WebSocketApp
def on_message(ws, message):
print(message)
def on_open(ws):
ws.send("Hello, WebSocket!")
if __name__ == "__main__":
proxies = {
"http_proxy_host": "112.74.202.247",
"http_proxy_port": 16816,
}
ws = WebSocketApp("ws://echo.websocket.org/", on_message=on_message)
ws.on_open = on_open
ws.run_forever(**proxies)
方法二:
ws = WebSocketApp("ws://echo.websocket.org/",
http_proxy_host="112.74.202.247",
http_proxy_port=16816)
五、总结
- 在爬虫开发中,使用代理是提高程序稳定性的重要手段
- 优质代理能帮助解决IP封禁、访问限制等问题
- 不同库的代理设置方法有所不同,需注意格式差异
- 根据实际需求选择合适的代理类型(匿名度、协议支持等)