Scrapy:新手尝试传递空值
我在练习 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(下面的图片),我知道前面三行没有匹配到 sel.xpath("td[@class='c1']/span/text()").extract()
,所以它会打印出三个空值 []。我想知道怎么写才能跳过这些空值(只打印出 [u'1'] [u'2']...[u'20'])?或者唯一的方法就是我得修改我的第一个选择器 response.xpath('//tr')
吗?请教教我,谢谢!

3 个回答
0
这看起来是对你代码的一个简单修改。在打印 ranking_list
之前,先检查一下它是否为空。
for sel in response.xpath('//tr'):
ranking_list = sel.xpath("td[@class='c1']/span/text()").extract()
if ranking_list:
print ranking_list
0
你的代码应该这样工作:
1) for sel in response.xpath('//tr')
这行代码会从网页中获取所有的 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
输出的时候,它们的值会是空的。
0
我不是Scrapy的专家,但看起来它是一个空列表,而不是'null'值(在Python中叫做None)。
你可以用下面的代码检查它的长度:
if ranking_list:
print ranking_list
或者
if len(ranking_list) > 0:
print ranking_list