python - 如何将 parse 函数的信息返回给 start_requests 函数?
问题描述
这个问题开始让我非常沮丧,因为我觉得我不知道 scrapy 是如何工作的,而且我无法将我的头脑围绕在文档上。
我的问题很简单。我有最标准的蜘蛛。
class MySpider(scrapy.spider):
def start_requests(self):
header = ..
url = "www.website.whatever/search/filter1=.../&page=1"
test = scrapy.Request(url=url, callback=self.parse, headers = header)
def parse(self, response):
site_number_of_pages = int(response.xpath(..))
return site_number_of_pages
我只是想以某种方式将解析函数中的页面数返回到启动请求函数中,这样我就可以启动一个 for 循环来遍历网站上的所有页面,再次使用相同的解析函数。上面的代码仅说明了原理,但如果付诸实践,将无法正常工作。变量test
将是一个Request
类,而不是我想要的普通 Joe 整数。
我将如何完成我想做的事情?
编辑:这是我到目前为止尝试过的
class MySpider(scrapy.spider):
def start_requests(self):
header = ..
url = ..
yield scrapy.Request(url=url, callback=self.parse, headers = header)
def parse(self, response):
header = ..
site_number_of_pages = int(response.xpath(..))
for count in range(2,site_number_of_pages):
url = url + str(count)
yield scrapy.Request(url=url, callback=self.parse, headers = header)
解决方案
Scrapy 是异步框架。这里没有任何可能......返回start_urls
- 只有请求后跟它的回调。
在一般情况下,如果请求是由于某些响应解析而出现的(在您的情况下 -site_number_of_pages
从第一个 url 开始) - 它不是start_requests
在这种情况下,您可以做的最简单的事情是从方法yield
请求。parse
def parse(self, response):
site_number_of_pages = int(response.xpath(..))
for i in range(site_number_of_pages):
...
yield Request(url=...
推荐阅读
- c++ - C++ 初始化何时仅使用复制构造函数,何时同时使用复制构造函数和赋值运算符
- html - Spring - 无法在 HTML 中显示来自 DB 的记录
- php - CakePHP 的深度联想之和
- php - php max_input_time -1 含义:php.ini vs php 文档?
- python - python中的斐波那契无法运行接收语法错误或其他的代码
- soapheader - tcp/ip 监视器中未显示肥皂标头
- arrays - 从 bash 读取 yml 文件并将其存储到变量中
- java - 在 Redis 中实现某种 key:key:list 的更简单方法?
- javascript - Bootstrap Tour 是否允许错误消息验证?
- mysql - 在单个 postgres 表中生成多个索引