我HtmlXPathSelector(response)
在 Scrapy 中使用对象,我需要获取两种文本格式:
我的第一个文本具有以下格式:
<p> Text, text, text, text, text, text, text, text, text </p>
<p>
<p> Text, text, text, text, text. </p>
我的第二个文本具有以下格式:
Text, text, text, text, text, text
<br>
<br>
Text, text, text..
<br>
<br>
当我使用x.select('//div[@id="texto"]/text()').extract()
但不是第二个时......我得到这样的东西:
'content': [u'\r\n ',
u'\r\n',
...
u'\r\n']
当我使用时,x.select('//div[@id="texto"]/p/text()').extract()
我得到第二个但不是第一个:
我怎样才能使用一种规则来获得两种格式?
更新:
我得到了下一个代码的解决方案,但我觉得这是一个肮脏的解决方案:
content = x.select('//div[@id="nota_texto"]/p/text()').extract()
if content == []:
data['content'] = x.select('//div[@id="nota_texto"]/text()').extract()
else:
data['content'] = content
更新 2:
可以使用双斜杠//
,但是现在我正在获取表格的内容,因为 HTML 具有以下格式:
<div id="texto">
<table>
Undesired content
</table>
Desired content.
</div>
如何避免获得“不受欢迎的内容”?
更新 3:
我在 Scrapy Users Google Groups 中收到了 Steven Almeroth 的回答:
使用以下兄弟姐妹:
x.select('id("texto")/table/following-sibling::node()').extract()
有用!