Python爬虫生成随机请求头 - fake-useragent封装
路径python。
·
在爬虫开发中,使用随机请求头(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)