【发布时间】:2016-09-09 16:22:58
【问题描述】:
我正在使用scrapy来处理这样的文档:
...
<div class="contents">
some text
<ol>
<li>
more text
</li>
...
</ol>
</div>
...
我想将内容区域内的所有文本收集到一个字符串中。
我还需要 <li> 元素中的 '1., 2., 3....',所以我的结果应该是 'some text 1. more text...'
所以,我正在循环遍历<div class="contents"> 的孩子
for n in response.xpath('//div[@class="contents"]/node()'):
if n.xpath('self::ol'):
result += process_list(n)
else:
result += n.extract()
如果n 是一个有序列表,我会遍历它的元素并将一个数字添加到li/text()(在process_list() 中)。如果n 本身是一个文本节点,我只是读取它的值。
但是,'some text' 似乎不是节点集的一部分,因为循环没有进入else 部分。我的结果是'1. more text'
查找相对于其父节点的文本节点有效:
response.xpath('//div[@class="contents"]//text()')
找到所有文本,但这样我无法添加列表项编号。
我做错了什么,有没有更好的方法来完成我的任务?
【问题讨论】: