Python爬虫生成随机请求头 - fake-useragent封装
·
在爬虫开发中,使用随机请求头(User-Agent)可以有效避免被网站反爬机制识别。fake-useragent是一个常用的Python库,可以生成各种浏览器的随机User-Agent。
安装fake-useragent
bash
pip install fake-useragent
基础封装函数
下面是一个封装好的随机User-Agent生成器,包含异常处理和自动更新功能:
python
from fake_useragent import UserAgent
from functools import lru_cache
import logging
# 配置日志
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
class RandomUserAgent:
def __init__(self):
self.ua = UserAgent()
self._fallback_agents = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0'
]
@lru_cache(maxsize=32) # 缓存最近生成的32个User-Agent
def get_random(self, browser_type=None):
"""
获取随机User-Agent
:param browser_type: 可选参数,指定浏览器类型
(chrome, firefox, safari, edge等)
:return: 随机User-Agent字符串
"""
try:
if browser_type:
return getattr(self.ua, browser_type)
return self.ua.random
except Exception as e:
logger.warning(f"获取随机User-Agent失败: {e}, 使用备用User-Agent")
import random
return random.choice(self._fallback_agents)
def get_headers(self, browser_type=None, **kwargs):
"""
获取包含随机User-Agent的请求头
:param browser_type: 可选,指定浏览器类型
:param kwargs: 可以添加其他请求头字段
:return: 包含随机User-Agent的请求头字典
"""
headers = {
'User-Agent': self.get_random(browser_type),
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Language': 'en-US,en;q=0.5',
'Accept-Encoding': 'gzip, deflate, br',
'Connection': 'keep-alive',
'Upgrade-Insecure-Requests': '1',
}
headers.update(kwargs)
return headers
# 创建全局实例
random_ua = RandomUserAgent()
# 快捷调用方式
def get_random_ua(browser_type=None):
"""快捷获取随机User-Agent"""
return random_ua.get_random(browser_type)
def get_random_headers(browser_type=None, **kwargs):
"""快捷获取包含随机User-Agent的请求头"""
return random_ua.get_headers(browser_type, **kwargs)
使用示例
基本使用
python
# 获取随机User-Agent字符串
print(get_random_ua()) # 随机浏览器
print(get_random_ua('chrome')) # 仅Chrome浏览器
print(get_random_ua('firefox')) # 仅Firefox浏览器
# 获取完整请求头
headers = get_random_headers()
print(headers)
# 自定义添加其他头信息
custom_headers = get_random_headers(
referer='https://www.google.com/',
cookie='some_cookie_value'
)
print(custom_headers)
在requests中使用
python
import requests url = 'https://httpbin.org/user-agent' headers = get_random_headers() response = requests.get(url, headers=headers) print(response.json()) # 查看返回的User-Agent
高级配置
1. 禁用缓存
默认情况下,fake-useragent会缓存下载的User-Agent数据。如果需要禁用:
python
ua = UserAgent(cache=False)
2. 自定义数据文件路径
python
ua = UserAgent(path='/path/to/custom/fake_useragent.json')
3. 使用特定版本浏览器
python
# 获取特定版本的Chrome User-Agent from fake_useragent import FakeUserAgent ua = FakeUserAgent(browsers=['chrome'], os='windows', min_percentage=1.3) print(ua.chrome)
注意事项
-
网络连接问题:首次使用会下载User-Agent数据库,确保网络畅通
-
更新数据库:定期更新数据库获取最新的User-Agent
python
from fake_useragent import UserAgent ua = UserAgent() ua.update()
-
备用方案:如fake-useragent不可用,代码中已包含备用User-Agent列表
-
合理使用:不要过于频繁地更换User-Agent,这本身可能被识别为爬虫行为
这个封装提供了简单易用的接口,同时具备良好的健壮性和可扩展性,适合大多数爬虫项目的需求。
更多推荐



所有评论(0)