您好我使用python的scrapy从网站上刮下一张桌子,所以我必须使用scrapy的Selector xpath来完成这项工作。我正在考虑获取表的所有数据内容,然后使用表头压缩(zip()),以便在我的最终数据中,每个表的数据内容都与表示它的标签匹配。但是,我注意到表中的某些部分没有值...而不是
<td>24</td>
它只是
<td></td>
当我刮擦时,scrapy将跳过空标签并获得下一个值。这搞砸了我将拉链的方式,因为缺少值,所有东西都可以向左移动一个或多个。那么..是否有一种方法可以使scrapy的Selector xpath返回某种Null标识符,那里缺少某些东西,以便我可以解释缺少的信息?或者也许有更好的方法来解决我的问题,以防止这个问题发生?谢谢!
编辑: xpath看起来像......
Selector(response).xpath("tbody/tr/td/text()").extract()
答案 0 :(得分:4)
这是怎么回事?
values = [''.join(td.xpath('.//text()').extract()) for td in Selector(response).xpath('//tbody/tr/td')]
解释
<td>123</td>
案例:xpath('//td/text()').extract()
返回[u'123']
<td></td>
案例:xpath('//td/text()').extract()
返回[]
''。join([u'123'])==&gt; u'123'
''。join([])==&gt;你'//空字符串
selector.xpath('//td/text()')
等于selector.xpath('//td').xpath('.//text()')
values = []
for td in s1.xpath('//td'):
# td is a selector with single element
# so that it will not return a list with multiple values ['value1', 'value2']
# selector.xpath('.//text()') just two cases:
# 1) [] <td><td>
# 2) [u'values'] <td>values<td>
value = ''.join(td.xpath('.//text()').extract())
# returns '' or 'values'
values.append(value)
s1= Selector(text='<div><span></span><span>232</span><span>haha<span><span></span></div>')
values = [''.join(text.xpath('.//text()').extract()) for text in s1.xpath('//span')]
\# values: ['', u'232', u'haha', '', '']