Scrapy突破反爬虫限制

本文介绍如何使用Scrapy的中间件实现随机更换User-Agent和代理IP,以提高爬虫稳定性和隐蔽性。文中详细讲解了利用fake-useragent库获取最新的User-Agent,并通过自定义中间件实现随机选取。此外,还介绍了如何设置随机代理IP,包括免费代理和付费服务的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.用户代理池

downloader middleware实现随机更换User-Agent.

fake-useragent库:up to date simple useragent faker with real world database.

github-搜索fake-useragent

https://fake-useragent.herokuapp.com/browsers/0.1.5

以上这个url去查询到所有可用的user-agent。注意:最后这个版本号pypi fake-useragent可查询到最新。

安装:pip install fake-useragent

middlewares.py

from fake_useragent import UserAgent

class RandomUserAgentMiddlware(object):
    """
    随机更换user-agent
    """

    def __init__(self, crawler):
        super(RandomUserAgentMiddlware, self).__init__()
        self.ua = UserAgent()
        self.ua_type = crawler.settings.get("RANDOM_UA_TYPE", "random")

    @classmethod
    def from_crawler(cls, crawler):
        """
        把crawler返回给当前类,这个crawler中包含有一切配置和参数(如settings等)
        :param crawler:
        :return:
        """
        return cls(crawler)

    def process_request(self, request, spider):
        def get_ua():
            # getattr() 函数用于返回一个对象属性值5356
            return getattr(self.ua, self.ua_type)

        request.headers.setdefault("User-Agent", get_ua())

settings.py

# Enable or disable downloader middlewares
DOWNLOADER_MIDDLEWARES = {
    'picspider.middlewares.RandomUserAgentMiddlware': 543,
    'picspider.middlewares.PicspiderDownloaderMiddleware': None,
}
#定义控制开关
RANDOM_UA_TYPE = "random"

===========================================================

定义一个main.py,调试(debug)使用。

# -*- coding: utf-8 -*-
from scrapy.cmdline import execute

import sys
import os

sys.path.append(os.path.dirname(os.path.abspath(__file__)))
execute(["scray","crawl","pic"])

2.随机ip代理

class RandomProxyMiddlware(object):
    """
    随机更换proxy
    """
    def process_request(self, request, spider):

        request.mate['proxy']="http://221.321.45.43:8081"
scrapy-proxies免费版本,需要自己维护一个ip文档
scrapy-crawlera

需要去crawlera官网上申请一个账号

3.COOKIE禁用

# Disable cookies (enabled by default)
# COOKIES_ENABLED = False

是否禁用COOKIE,有的网站是通过cookie来判断是不是爬虫。特别是对于那些不登录也能爬取的网站,很重要。需要登录的网站,若禁用,则登录不成功。

4.自动限速

DOWNLOAD_DELAY = 3
下载器下载下一个页面所等待的时间,用来限制爬取速度,减轻服务器的压力;也支持小数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值