我想收集来自2个不同网站的项目数据。
它应该如下工作:
如果项目在items.py
:
import scrapy
from scrapy.loader import ItemLoader
from myproject.items import MyItem
class MySpider(scrapy.Spider):
name = "myspider"
def __init__(self):
self.item = ItemLoader(item=MyItem(), response=response)
def start_requests(self):
scrapy.Request(url="http://website_1.com", callback=self.parse_website_1)
def parse_website_1(self, response):
name = response.xpath('//div[@class="name"]/text()').extract_first()
self.item.add_value("name", name)
website_2_path = "http://website_2.com/" + name
yield scrapy.Request(url=website_2_path, callback=self.parse_website_2)
def parse_website_2(self, response):
self.item.add_xpath("hair_color", '//div[@class="hair_color"]')
yield self.item.load_item()
答案 0 :(得分:2)
这个想法是对的,但是实现不正确,因为您尝试使用实例属性(self.item
)在连续请求之间传递数据。 Scrapy请求是异步的,因此无法按预期工作。
Scrapy FAQ概述了如何做到这一点的正确方法。使用Request
的{{1}}属性将部分商品数据传递给连续请求,您可以使用meta
的{{1}}属性获取该属性,添加更多数据并最终生成商品。这是改编的代码:
Response