当前位置: 首页 > 知识库问答 >
问题:

正在提取文本xpath scrapy

欧阳斌
2023-03-14

大家好,我想使用scrapy中的xpath从html块中提取所有文本

假设我们有这样一个块:

<div>
   <p>Blahblah</p>
   <p><a>Bluhbluh</a></p>
   <p><a><span>Bliblih</span></a></p> 
</div>

我想将文本摘录为[“blahblah”,“blahblah”,“blihblih”]。我希望xpath在div节点中递归查找文本。我听说过try://div/p[descendant-or-self::*]/text(),但它不提取嵌套元素

干杯!SEB

共有2个答案

苏宏峻
2023-03-14
>>> selector.xpath('//div/p/descendant-or-self::*/text()').extract()
[u'Blahblah', u'Bluhbluh', u'Bliblih']

你差一点!你所要做的只是把后代或自己的文本,而不是把它作为一个属性。[]用于“交谈”属性,在您的例子中是p的属性,它们是不存在的。

张溪叠
2023-03-14

您可以在每个p元素上使用XPath的string()函数:

>>> import scrapy
>>> selector = scrapy.Selector(text="""<div>
...    <p>Blahblah</p>
...    <p><a>Bluhbluh</a></p>
...    <p><a><span>Bliblih</span></a></p> 
... </div>""")
>>> [p.xpath("string()").extract() for p in selector.xpath('//div/p')]
[[u'Blahblah'], [u'Bluhbluh'], [u'Bliblih']]
>>> import operator
>>> map(operator.itemgetter(0), [p.xpath("string()").extract() for p in selector.xpath('//div/p')])
[u'Blahblah', u'Bluhbluh', u'Bliblih']
>>> 
 类似资料:
  • 问题内容: 我想从一般的HTML页面中提取所有文本(是否显示)。 我想 删除 任何HTML标记 任何JavaScript 任何CSS样式 是否有一个正则表达式(一个或多个)可以实现? 问题答案: 您不能真正用正则表达式解析HTML。太复杂了。RE根本无法正确处理部分。此外,某些常见的HTML之类的东西将在浏览器中作为适当的文本工作,但可能会使天真的RE感到困惑。 有了合适的HTML解析器,您会更快

  • 提取的文本:http://pastebin.com/BXFfMy0z 问题pdf:http://www.iwb.ch/media/Unternehmen/Dokumente/inserat_leiter_pm.pdf 如何从该pdf文件中提取正确的文本?

  • 我需要从如下节点中提取文本: 我需要建立: 仅返回div的所有内容。-不在子元素内的所有内容。两者都错了。迭代子节点会忽略文本节点。 文本节点-某些文本

  • 本章介绍如何使用Java从Word文档中提取简单文本数据。 如果要从Word文档中提取元数据,请使用Apache Tika。 对于.docx文件,我们使用类org.apache.poi.xwpf.extractor.XPFFWordExtractor,它从Word文件中提取并返回简单数据。 同样,我们有不同的方法从Word文件中提取标题,脚注,表格数据等。 以下代码显示如何从Word文件中提取简单

  • 下面的示例将展示在将HTML String解析为Document对象后使用方法获取文本。 语法 (Syntax) Document document = Jsoup.parse(html); Element link = document.select("a").first(); System.out.println("Text: " + link.text()); 哪里 docume

  • 问题内容: 我将div设置为,并设置了“ ” 样式,以便保留换行符。在Safari,FF和IE中,div的外观和工作原理几乎相同。一切都很好。我想做的是从该div中提取文本,但要确保其格式不会丢失- 特别是换行符。 我们使用的是jQuery,它的功能基本上是执行预定的DFS,并将DOM分支中的所有内容粘合在一起。这会丢失格式。 我看过该函数,但似乎所有这三种浏览器都使用div 幕后生成的实际HTM