Python xpath选择器获取错误

时间:2016-09-27 11:31:35

标签: python-3.x scrapy

我想从这个website中抓取一些数据,我的蜘蛛代码是:

# -*- coding: utf-8 -*-
import scrapy
from coder.items import CoderItem
# from scrapy.loader import ItemLoader


class LivingsocialSpider(scrapy.Spider):
    name = "livingsocial"
    allowed_domains = ["livingsocial.com"]
    start_urls = (
        'http://www.livingsocial.com/cities/15-san-francisco',
    )

    def parse(self, response):
        # deals = response.xpath('//li')
        for deal in response.xpath('//li/a//h2'):
            item = CoderItem()
            item['title'] = deal.xpath('text()').extract_first()
            yield item

它工作得很好,但问题是当我换成

for deal in response.xpath('//li'):
    item = CoderItem()
    item['title'] = deal.xpath('a//h2/text()').extract_first()
    yield item

这个,它没有返回!那不应该是一样的吗?

1 个答案:

答案 0 :(得分:2)

这里的问题是来自response.xpath("//li")的某些节点下面没有任何a节点,所以你得到空项目,因为标题不存在。

你可以做的是改用这个xpath:

items = response.xpath('//li[a//h2/text()]')
len(items)
# 1019
titles = [i.xpath("a//h2/text()").extract_first() for i in items]
len([t for t in titles if t])
# 1019

正如您所看到的,现在每个项目节点都有一个项目。