我想要加載兩個項目到項目加載程序,通過response.meta命令實例化。不知怎的,標準:項目加載程序不能與response.meta一起工作
loader.add_xpath('item', 'xpath')
不工作(即沒有值被保存或書面的,它就像「項目」永遠不會創建),但具有完全相同的表達:
response.xpath('xpath)
loader.add_value('item',value)
的作品?任何人現在爲什麼填寫以下代碼:
Spider.py
def parse(self, response):
for record in response.xpath('//div[@class="box list"]/div[starts-with(@class,"record")]'):
loader = BaseItemLoader(item=BezrealitkyItems(), selector=record)
loader.add_xpath('title','.//div[@class="details"]/h2/a[@href]/text()')
listing_url = record.xpath('.//div[@class="details"]/p[@class="short-url"]/text()').extract_first()
yield scrapy.Request(listing_url, meta={'loader' : loader}, callback=self.parse_listing)
def parse_listing(self, response):
loader = response.meta['loader']
loader.add_value('url', response.url)
loader.add_xpath('lat','//script[contains(.,"recordGps")]',re=r'(?:"lat":)[0-9]+\.[0-9]+')
return loader.load_item()
以上不工作,當我嘗試這一點,但工作:
lat_coords = response.xpath('//script[contains(.,"recordGps")]/text()').re(r'(?:"lat":)([0-9]+\.[0-9]+)')
loader.add_value('lat', lat_coords)
我item.py有沒有什麼特別的:
class BezrealitkyItems(scrapy.Item):
title = scrapy.Field()
url = scrapy.Field()
lat = scrapy.Field()
class BaseItemLoader(ItemLoader):
title_in = MapCompose(lambda v: v.strip(), Join(''), unidecode)
title_out = TakeFirst()
只是爲了澄清,我沒有得到任何錯誤消息。這只是'lat'項目還沒有被創建,也沒有被刮除。其他項目都很好,包括通過parse_listing函數添加的url。
真正偉大的回答,非常感謝爲明確寫出如何在第一解析產量scrapy.Request部分的代碼。成功了! – Svarto