Scrapy:如何获取某些特定文本之后的信息?

时间:2017-02-19 12:31:35

标签: python regex xpath web-scraping scrapy

我正在使用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]

1 个答案:

答案 0 :(得分:1)

顺便说一下,我猜你错过了关闭strong标签

response.xpath('//li[@class="item" and contains(.,"Annual taxes:")]/strong/text()')