我是新手。我想解析的网站被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状态代码未处理或不允许
答案 0 :(得分:0)
您是使用scrapy runspider
还是scrapy crawl
来运行蜘蛛吗?理想情况下,您应该使用scrapy crawl
才能使用设置。
此外,作为自定义中间件的替代方法,您可以设置http_proxy
和https_proxy
环境变量以在所有请求中使用代理。
您可以在启动Spider之前在外部进行设置,或者在开始时在脚本内部进行设置,例如:
import os
os.environ['http_proxy'] = 'http://my/proxy'
os.environ['https_proxy'] = 'http://my/proxy'