我正在使用Scrapy来获取我所在地区的公寓价格。在广告说明中,有一个包含属性的列表,如下所示:
<ul class="list">
<li class="item">Size: <strong class="description">100 m²</strong></li>
<li class="item">Rooms: <strong class="description">3</strong></li>
<li class="item">Parking space: <strong class="description">2</strong></li>
<li class="item">Annual taxes: <strong class="description">$ 1000</strong></li>
</ul>
我遇到的问题是,其中一些属性(如年税和停车位)并未出现在所有广告中。这意味着我不能简单地使用带有#-index的extract()来获取该信息,因为我可能会捕获错误类别的信息。
所以我的问题是:我怎样才能获取“年度税”或“停车位”文字后面的信息? XPath或RegEx可以这样做吗?
这是我目前用于蜘蛛的代码:
import scrapy
class ExampleSpider(scrapy.Spider):
name = 'example'
start_urls = ['http://www.example.com']
def parse(self, response):
for item in response.css('li.item'):
url = item.css('a.link::attr(href)').extract_first()
yield scrapy.Request(url, callback=self.parse_item)
def parse_item(self, response):
title = response.css('h1.ad-title::text').extract_first().strip()
price = response.css('span.ad-price::text').extract_first()
size = response.css('li.item strong.description::text').extract()[0].strip(' m²')
rooms = response.css('li.item strong.description::text').extract()[1]
parking = response.css('li.item strong.description::text').extract()[2]
taxes = response.css('li.item strong.description::text').extract()[3]
答案 0 :(得分:1)
顺便说一下,我猜你错过了关闭strong
标签
response.xpath('//li[@class="item" and contains(.,"Annual taxes:")]/strong/text()')