我想从这个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
这个,它没有返回!那不应该是一样的吗?
答案 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
正如您所看到的,现在每个项目节点都有一个项目。