Scrapy配置UA轮换中间件后仍提示robots规则无对应UA如何解决
问题原因
- 核心爬取失败原因是
allowed_domains配置错误:该配置仅支持填写纯域名,不能携带路径,你填写的thegreyhoundrecorder.com.au/form-guides/会导致除robots.txt外的所有页面请求被域名过滤规则直接丢弃。 - 代码存在语法错误:类方法
clean_date缺少self参数,调用时会触发参数不匹配报错。 - start_urls存在冗余斜杠:末尾的双斜杠
//可能导致部分站点路由匹配异常。 - protego的DEBUG日志为非阻断性提示:Scrapy请求robots.txt时优先级高于普通页面请求,此时自定义UA中间件还未生效,请求未携带User-Agent,导致protego解析robots规则时无法匹配对应UA输出该日志,本身不会阻止爬取。
修复方案
- 修正爬虫基础配置,修改
GreyhoundSpider类的对应参数:
allowed_domains = ['thegreyhoundrecorder.com.au'] start_urls = ['https://thegreyhoundrecorder.com.au/form-guides/']
- 修正
clean_date方法参数:
def clean_date(self, dm): year = pd.to_datetime('now').year race_date = pd.to_datetime(dm + ' ' + str(year)).strftime('%d/%m/%Y') return race_date
- 如需屏蔽protego的DEBUG日志,在settings.py中添加日志级别配置:
LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'loggers': { 'protego': { 'level': 'INFO', }, } }
- 可选优化:调高原自定义UA中间件的优先级,让robots.txt请求也能携带自定义UA,修改settings.py中的中间件配置:
DOWNLOADER_MIDDLEWARES = { 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None, 'greyhound_recorder_website.middlewares.UserAgentRotatorMiddleware': 100, }
内容的提问来源于stack exchange,提问作者chuky pedro
相关产品推荐
相关产品推荐

