Scrapy不使用settings.py中的参数。

问题描述 投票:0回答:1
我是新手。我想解析的网站被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 [C0:HTTP状态代码为未处理或不允许

然后我就收到了

403 HTTP状态码未处理或不允许
python-3.x scrapy http-error
1个回答
0
投票
您是使用http://www.some_url.com还是scrapy runspider运行Spider?理想情况下,您应该使用scrapy crawl来使用您的设置。

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

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

https_proxy

© www.soinside.com 2019 - 2024. All rights reserved.