scrapy防止反爬虫

1.settings.py中的重点字段和内涵
USER_AGENT 设置ua
ROBOTSTXT_OBEY 是否遵守robots协议,默认是遵守
CONCURRENT_REQUESTS 设置并发请求的数量,默认是16个
DOWNLOAD_DELAY 下载延迟,默认无延迟
COOKIES_ENABLED 是否开启cookie,即每次请求带上前一次的cookie,默认是开启的
DEFAULT_REQUEST_HEADERS 设置默认请求头
SPIDER_MIDDLEWARES 爬虫中间件,设置过程和管道相同
DOWNLOADER_MIDDLEWARES 下载中间件

2.爬虫防止反爬虫的方法:
1)动态更换user-agent,设置代理池,
Step1:fake-useragent,随机获取UA。
github地址:https://github.com/hellysmile/fake-useragent
下载完放到python安装目录内(方便管理)
命令行pip install fake-useragent进行安装
Step2:

class RandomUserAgentMiddlware(object):
    def __init__(self, crawler):
        super(RandomUserAgentMiddlware, self).__init__()
        self.ua = UserAgent()
        #可读取在settings文件中的配置,来决定开源库ua执行的方法,默认是random,也可是ie、Firefox等等
        self.ua_type = crawler.settings.get("RANDOM_UA_TYPE", "random")
    @classmethod
    def from_crawler(cls, crawler):
        return cls(crawler)
    
    #更换用户代理逻辑在此方法中
    def process_request(self, request, spider):
        def get_ua():
            return getattr(self.ua, self.ua_type)

        print(get_ua())
        request.headers.setdefault('User-Agent', get_ua())

Step3:在settings.py中开启我们的Middleware,同时还要关闭scrapy自带的代理Middleware:

DOWNLOADER_MIDDLEWARES = {
   'web_content.middlewares.RandomUserAgentMiddlware': 543,
   'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None,
}

2)ip地址池:
VPN和代理IP 大部分网站使用IP来ban(质量不高,暂不采取)
免费代理不稳定,质量不高,排除掉。

3)设置下载延迟
DOWNLOAD_DELAY = 0

4)scrapy集成selenium(效率较低,暂不采取)

5)禁用cookie
COOKIES_ENABLED = False

6)违反爬虫规则文件
ROBOTSTXT OBEY = False

7)限制访问频率(导致爬虫速度下降,暂不采取)

#开启访问频率限制
AUTOTHROTTLE ENABLED = True
#设置访问开始的延迟
AUTOTHROTTLE START DELAY = 5
#设置访问之间的最大延迟
AUTOTHROTTLE MAX DELAY = 60
#设置Scrapy 并行发给每台远程服务器的请求数量
AUTOTHROTTLE TARGET CONCURRENCY= 1.0
#设置下裁之后的自动延迟
DOWNLOAD DELAY = 3

8)对于爬虫过程中失败的链接
措施1:

#对失败的HTTP进行重新请求
RETRY_ENABLED = True
RETRY_TIMES = 1

措施2:对应重新请求在此失败,详见下一专题“解决ajax异步渲染页面防止反爬虫”

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值