在Python爬虫开发中,设置随机User-Agent是防止被服务器识别为爬虫的重要手段。这可以通过多种方式实现,其中最常用的是使用fake-useragent库。

使用fake-useragent库的方法
首先需要安装fake-useragent库:pip install fake-useragent。安装完成后,可以通过以下代码实现随机User-Agent的获取:

import requests
from fake_useragent import UserAgent

def get_random_user_agent():
    ua = UserAgent()
    return ua.random

def crawl_url(url):
    headers = {'User-Agent': get_random_user_agent()}
    response = requests.get(url, headers=headers)
    if response.status_code == 200:
        return response.text
    else:
        print("Failed to fetch URL:", response.status_code)
    return None

if __name__ == "__main__":
    url = "https://example.com"
    html_content = crawl_url(url)
    print(html_content)

进阶封装方案
对于更复杂的项目,建议对fake-useragent进行封装,增加异常处理和备用方案:

from fake_useragent import UserAgent
from functools import lru_cache
import logging
import random

# 配置日志
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)
    def get_random(self, browser_type=None):
        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")
            return random.choice(self._fallback_agents)

其他实现方式
除了使用第三方库,还可以通过手动维护User-Agent列表结合random模块来实现随机选择:

import random

user_agents = [
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15) AppleWebKit/605.1.15',
    'Mozilla/5.0 (X11; Linux x86_64) Gecko/20100101 Firefox/64.0'
]

def get_random_ua():
    return random.choice(user_agents)

使用建议
在Scrapy框架中,可以通过下载器中间件来设置随机User-Agent。无论采用哪种方法,都建议在爬虫中遵循网站的robots.txt协议,避免过于频繁的请求,以减少对目标服务器的负担。
通过随机更换User-Agent,可以有效模拟不同浏览器和设备的访问行为,显著提高爬虫的成功率和稳定性。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐