Scrapy不使用settings.py

时间:2019-09-27 10:37:43

标签: python-3.x scrapy http-error

我是新手。我想解析的网站被ip阻止了我的小蜘蛛。我收到520错误。如果我直接在Spider中初始化header / user_agent,并且还在scrapy.Request的meta参数中设置了proxy,则我可以发送第一个请求并获取代码200,但随后卡在403 HTTP状态代码将被处理或不允许。因此,我编辑了middlewares.py,添加了CustomProxyMiddleware。在settings.py中,我设置了USER_AGENT并使用CustomProxyMiddleware添加了DOWNLOADER_MIDDLEWARES,但是当我启动Spider时,它不使用代理,并且我认为user_agent默认是我的,除了我的。

middlewares.py

class CustomProxyMiddleware(object):
    def process_request(self, request, spider):
        request.meta['proxy'] = "http://103.35.64.12:3128"
        return None

settings.py

BOT_NAME = 'SGinfotrackker'

SPIDER_MODULES = ['SGinfotrackker.spiders']
NEWSPIDER_MODULE = 'SGinfotrackker.spiders'


# Crawl responsibly by identifying yourself (and your website) on the user-agent
USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36'

# Obey robots.txt rules
ROBOTSTXT_OBEY = True


DOWNLOAD_DELAY = 15

DOWNLOADER_MIDDLEWARES = {'SGinfotrackker.middlewares.CustomProxyMiddleware': 350,
    'SGinfotrackker.middlewares.SginfotrackkerDownloaderMiddleware': None,
}

首先我得到

  

忽略响应<520 http://www.some_url.com>:HTTP状态代码为   未处理或不允许

然后我就收到

  

403 HTTP状态代码未处理或不允许

1 个答案:

答案 0 :(得分:0)

您是使用scrapy runspider还是scrapy crawl来运行蜘蛛吗?理想情况下,您应该使用scrapy crawl才能使用设置。

此外,作为自定义中间件的替代方法,您可以设置http_proxyhttps_proxy环境变量以在所有请求中使用代理。

您可以在启动Spider之前在外部进行设置,或者在开始时在脚本内部进行设置,例如:

import os
os.environ['http_proxy'] = 'http://my/proxy'
os.environ['https_proxy'] = 'http://my/proxy'