pyr*_*ace 1 python xpath scrapy web-scraping
嗨,我正在使用python 的scrapy 从站点上刮下一张表,所以我必须使用scrapy 的Selector xpath 来执行此操作。我正在考虑获取表格的所有数据内容,然后将其与表格标题一起压缩 (zip()),以便在我的最终数据中,表格的每个数据内容都与代表它的标签相匹配。但是,我注意到表的某些部分没有值.. 就像 in 而不是
<td>24</td>
Run Code Online (Sandbox Code Playgroud)
只是
<td></td>
Run Code Online (Sandbox Code Playgroud)
当我抓取时,scrapy 会跳过空标签并获取下一个值。这搞砸了我要压缩的方式,因为由于缺少值,所有东西都可能向左移动一个或多个。那么..有没有办法让scrapy的选择器xpath返回某种空标识符,那里缺少某些东西,以便我可以解释丢失的信息?或者,也许有更好的方法来解决我的问题,以防止发生此问题?谢谢!
编辑:xpath 看起来像......
Selector(response).xpath("tbody/tr/td/text()").extract()
Run Code Online (Sandbox Code Playgroud)
那这个呢?
values = [''.join(td.xpath('.//text()').extract()) for td in Selector(response).xpath('//tbody/tr/td')]
Run Code Online (Sandbox Code Playgroud)
解释:
对于<td>123</td>情况:xpath('//td/text()').extract()返回[u'123' ]
对于<td></td>案例:xpath('//td/text()').extract()返回 []
''.join([u'123']) ==> u'123'
''.join([]) ==> u'' //空字符串
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)
Run Code Online (Sandbox Code Playgroud)
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', '', '']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1693 次 |
| 最近记录: |