python - 如何**防止** Scrapy Request 下载请求?
问题描述
我正在为动态网站制作基于 Selenium 的蜘蛛。但我想留在 Scrapy 框架内,因为这个蜘蛛是一个更大的项目的一部分,它利用所有使用相同工作流/命令的蜘蛛。
最简单的做法是,将请求从start_requests()
to传递parse()
并在parse()
.
但是,通过这种方式,我将向网站发出双重请求——一次由 Scrapy 请求,一次由 Selenium 请求。
我想要的是,只将 url 传递给 Selenium in parse()
,下载它,然后进一步解析:
def start_requests(self):
for url in self.start_urls:
yield from self.parse(url)
这是首先想到的,但似乎 Scrapy 有一定的局限性,start_requests()
最终必须产生一种Request
对象。如果我这样做,我会收到错误(可以根据要求指定它们)。
所以我想出了另一个想法:使用原来的start_requests()
,因为一个Request
对象不应该下载页面本身,并禁用这样做的下载中间件。但是,即使禁用所有中间件:
custom_settings = {
'DOWNLOADER_MIDDLEWARES' : {
},
'SPIDER_MIDDLEWARES': {
},
'DOWNLOAD_HANDLERS': {
},
}
当我检查传出请求时ngrep
,我仍然可以看到,Scrapy 还在下载除了 Selenium 之外的远程 url,尽管自定义设置应该已经切断了下载器。
在这种情况下,如何通过 Selenium 只下载一次网址?
解决方案
推荐阅读
- javascript - 如何在 A-frame 中使用“keyboard-controls”组件按住多个键
- android - 通过最宽的子视图和 match_parent 第二个子视图拉伸布局
- css - CSS中重叠的交叉边界
- google-apps-script - 使用 Apps 脚本从 GMail 解析 HTML
- ruby-on-rails - 即使在清除每个缓存后,Rails 5 html 更改也不会显示
- python - 安装了 python3,在 RHEL 上的终端中找不到命令错误
- sql - 将列从一个表附加到 Oracle 中的另一个表
- python - 熊猫找到满足条件的日期之间的持续时间?
- c# - 将字符串数据从串口解析为整数
- sql-server - SSRS 2008 r2 报告在加载时冻结