【问题标题】:Scrapy:newbie attempts to pass the null valueScrapy:newbie 尝试传递空值
【发布时间】:2014-07-23 00:38:35
【问题描述】:

当我练习scrapy时,我有一个问题,这是我的代码:

class MySpider(Spider):   
name = "yahoochart"
start_urls = ["https://tw.movies.yahoo.com/chart.html"]
def parse(self, response):
    for sel in response.xpath('//tr'):
        ranking_list = sel.xpath("td[@class='c1']/span/text()").extract()
        print ranking_list 

输出将是:

我打印了 sel(下图)并且知道因为前 3 行没有计算 sel.xpath("td[@class='c1']/span/text()").extract() 所以它会打印空值 [] 三次。 我想知道怎么写才能传递空值(只是prinit [u'1'] [u'2']...[u'20'])?或者唯一的方法是我必须编辑我的第一个选择器response.xpath('//tr') 请教教我,谢谢

【问题讨论】:

    标签: python xpath scrapy


    【解决方案1】:

    我不是一个scrapy专家,但它似乎是一个空列表而不是一个'null'值(在python中,它被命名为None)

    你可以用

    检查它的长度
    if ranking_list:
        print ranking_list 
    

    if len(ranking_list) > 0:
        print ranking_list 
    

    【讨论】:

      【解决方案2】:

      这似乎是对您的代码的直接修改。在打印之前检查ranking_list是否为空。

      for sel in response.xpath('//tr'):
          ranking_list = sel.xpath("td[@class='c1']/span/text()").extract()
          if ranking_list:
              print ranking_list 
      

      【讨论】:

        【解决方案3】:

        您的代码应该像这样工作:

        1) for sel in response.xpath('//tr') 将从 html 页面获取所有 tr 标签。

        2) 对于上面的每个标签,sel.xpath("td[@class='c1']/span/text()").extract() 将查找 <td class="c1">,然后是 <span> 标签,然后从 <span> 标签中获取文本。

        再次检查页面的来源,有 3 个 tr 标记不包含所有 <td class="c1"><span>(第 69、224、236 行)。所以当你print 出去时,它们将是空的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-04-18
          • 1970-01-01
          • 2016-06-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多