【发布时间】:2016-10-17 16:20:52
【问题描述】:
为了理解http://oliverguenther.de/2014/08/almost-asynchronous-requests-for-single-item-processing-in-scrapy/中的“Naive approach”例子
我正在尝试复制该代码。这个想法是填充一个项目,其中每个字段都来自不同的网站。
我试图了解为什么在运行以下代码时会出现以下行为,然后我使用scrapy crawl compSpider -o prices.csv 将结果导出到 csv 文件中。
代码实际上用相关价格填充了 nic_price,但它对 tester_price 不做同样的事情。
我相信它应该这样做,因为项目加载器对象在请求元字段中从第一个回调 [firstRequest](创建项目加载器对象)到第二个回调 [parseDescription1](项目加载器在其中对象最终被加载到一个项目中。
我已经测试过 css 选择器可以工作。有人可以帮我理解为什么我会出现这种行为吗?
项目声明
import scrapy
class ProductItem(scrapy.Item):
nic_price = scrapy.Field()
tester_price = scrapy.Field()
蜘蛛代码
import scrapy
from scrapy.http import Request
from scrapy.loader import ItemLoader
from comparator.items import ProductItem
class Compspider(scrapy.Spider):
name = "compSpider"
#start_urls = ( 'https://www.shop.niceic.com/', )
def start_requests(self):
yield Request(
'https://www.shop.niceic.com/6559-megger-mft1711-multifunction-tester-1008-121', callback=self.firstRequest)
def firstRequest(self, response):
l = ItemLoader(item=ProductItem(), response=response)
l.add_css('nic_price', 'div.product-info p.product-price span[itemprop="price"]::text')
yield Request('https://www.tester.co.uk/test-safe-pen-co-meter', meta={'loader' : l}, callback= self.parseDescription1)
def parseDescription1(self, response):
# Recover item(loader)
l = response.meta['loader']
# Use just as before
l.add_css('tester_price', 'div.price-breakdown div.price-excluding-tax span.price::text')
yield l.load_item()
【问题讨论】:
标签: python csv scrapy web-crawler