Scrapy 不使用 settings.py 参数



我是新手。我的刮擦蜘蛛被我要解析的网站阻止了 ip。我收到 520 错误。如果我在 spider 中正确初始化标头/user_agent,并在 scrapy 的元参数中设置代理。请求,我能够发送第一个请求并获取代码 200,但随后它卡在 403 HTTP 状态代码未处理或不允许。所以我编辑 middlewares.py 添加了CustomProxyMiddleware。在 settings.py 中,我设置了USER_AGENT并使用自定义代理中间件添加了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 状态代码未处理或不允许

您是否正在使用scrapy runspiderscrapy crawl来运行蜘蛛?理想情况下,您应该使用scrapy crawl才能使用您的设置。

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

您可以在启动爬虫之前在外部设置,也可以在开始时在脚本内部设置,例如:

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

最新更新