我是新手。我的刮擦蜘蛛被我要解析的网站阻止了 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 runspider
或scrapy crawl
来运行蜘蛛?理想情况下,您应该使用scrapy crawl
才能使用您的设置。
此外,作为自定义中间件的替代方法,您可以将http_proxy
和https_proxy
环境变量设置为在所有请求中使用代理。
您可以在启动爬虫之前在外部设置,也可以在开始时在脚本内部设置,例如:
import os
os.environ['http_proxy'] = 'http://my/proxy'
os.environ['https_proxy'] = 'http://my/proxy'