【问题标题】:Get 2 separate xpath values from one span with a line break从一个带换行符的跨度中获取 2 个单独的 xpath 值
【发布时间】:2019-03-08 21:29:47
【问题描述】:

我的 HTML 如下所示:

<span>
Word 1
Sentence 1
</span>

我可以用以下方式提取它:

//span/text()

这给了我

Word 1
Sentence 1

是否可以在 XPATH 中分别获取/提取单词 1 和句子 1? (用于 Scrapy 的 Python 中的 XPath 提取器)

我试过了:

//span/text()[1]
//span/text()[2]

substring-before(//span/text(),'\n')

但两者都是疯狂的猜测并且不起作用。

【问题讨论】:

    标签: html xpath scrapy


    【解决方案1】:

    您可以通过

    获得第一项“Word 1”
    normalize-space(substring-before(substring-after(translate(span/text(),'&#xd;',''),'&#xa;'),'&#xa;'))
    

    并得到第二个项目“Sentence 1”

    normalize-space(substring-after(substring-after (translate(span/text(),'&#xd;',''),'&#xa;'),'&#xa;'))
    

    如果您不需要 normalize-space(...),您可以删除它。
    上下文节点应该是span 的父节点,否则你应该在表达式前面加上//。您的主要问题是在第一项之前有一个换行符 (\n)。

    编辑:
    我为 Windows 的CRLF 添加了处理CR 字符的解决方案。它只是删除CR 字符并作用于LF 字符。

    【讨论】:

    • 我明白了,谢谢。但这对于在 Linux 和 Windows 上创建的 HTML 文件会有所不同吗? \r\n\n
    • 好问题。我添加了处理CRLF 情况的解决方案。它的简单方法是从输入中删除CR 字符。
    【解决方案2】:

    请参阅a previous question 了解如何正确访问元素的内部内容。

    然后,处理输出字符串以满足您的需求。

    【讨论】:

    • 似乎没有解决我的问题。我添加了更多内容以供澄清。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    • 2017-09-27
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    相关资源
    最近更新 更多