我想为同一个项目抓取多个页面,但是每次我让步时,它返回的是项目列表的增量,而不是同一个项目列表中的所有子项目。
class GdSpider(scrapy.Spider):
name = 'pcs'
start_urls = [...]
def parse(self, response):
PC= dict()
PC['Name'] = response.css('h2::text').get()
components_urls = response.css('a::attr(href)').get()
components = []
for url in components_urls:
req = yield scrapy.Request(response.urljoin(url), self.parse_component)
components.append(parse_component(req))
PC['components'] = components
yield PC
def parse_component(self, response):
component_name = response.css('h1::text')
component_tag = response.css('div[class="tag"]::text').get()
yield {"component_name": component_name, "component_tag": component_tag}
我的out应该如下所示:
{"Name": "HP 15", "components": [.....]}
但它能独立刮除所有东西:
{"Name": "HP 15", "components": [<generator object GdSpider.parse_part_component at 0x000001B8A7405230>]
{component1}
{component2}
例如,如何使用@inline-requests装饰器返回一个包含所有组件的项?
1条答案
按热度按时间bakd9h0s1#
**选项1:**使用
async await
**选项2:**使用类成员变量。
(注意
CONCURRENT_REQUESTS
为1)。