asjdf

一只在杭电摸鱼的小火鸡

Scrapy对抗Cloudflare反爬5秒盾
Aug 25, 2021
One minute read

对抗 5 秒盾用到库 cloudscraper

pip install cloudscraper

以中间件的形式插到 Scrapy 爬虫中

首先在爬虫中引入库:

import cloudscraper

然后在爬虫的类中按下面的结构插入代码:

class YourSpider(scrapy.Spider):
    name = 'xxxx'
    allowed_domains = ['xxxx.xxx']
    browser = cloudscraper.create_scraper() # 这行是你需要加入的代码

然后到 middlewares.py 中加一个中间件(不要在意中间件的名字):

class FuckCloudflare:
    def process_response(self, request, response, spider):
        if response.status == 403:
            if spider.name == 'xxxx': # 这里是我个人的处理 因为一个中间件可能给多个爬虫使用 在这做一下区分
                url = request.url
                rsp = spider.browser.get(url,
                                        proxies={'http': 'http://127.0.0.1:7890', # 这里的代理主要是爬取外国网站做的处理
                                                 'https': 'http://127.0.0.1:7890'},
                                        headers={'referer': url})
                return HtmlResponse(url=url,
                                    body=rsp.text,
                                    encoding="utf-8",
                                    request=request)
        return response

再到 setting.py 中找到DOWNLOADER_MIDDLEWARES启用中间件就好了:

DOWNLOADER_MIDDLEWARES = {
   '你的爬虫名字 参照其他配置改.middlewares.FuckCloudflare': 400,
   ···
   ···
}

Back to posts