【问题标题】:Selecting up to second space / first two words in a text()在 text() 中最多选择第二个空格/前两个单词
【发布时间】:2020-05-29 15:53:55
【问题描述】:

我无法弄清楚如何实现以下目标。我已经走到这一步了:

//*[@id="main"]/div[2]/section/div[2]/h1/span[1][starts-with(.,"IDENTIFIER")]/following::span[1]/text()

这将返回如下响应:

Foo1 Foo2 Foo3 Foo4

我试图只返回 Foo1 和 Foo2,其中 Foo1 和 Foo2 可以是任意长度的字符,并且后面可能有任意数量的额外 Foo。

我试过看

substring-before(//*[@id="main"]/div[2]/section/div[2]/h1/span[1][starts-with(.,"IDENTIFIER")]/following::span[1]/text(), ' ')

要提取到第一个空间,但是我做错了却碰壁了。

我在 Scrapy 蜘蛛中使用 xpath。任何帮助表示赞赏

【问题讨论】:

    标签: xpath web-scraping scrapy


    【解决方案1】:

    示例:

    <table>
    <td>Pierre Paul Jacques Marie Maurice Jeanne</td>
    </table>
    

    XPath 表达式:

    substring(//td,1,string-length(substring-before(//td," "))+string-length(substring-before(substring-after(//td," ")," "))+1)
    

    输出:

    Pierre Paul
    

    XPath 分 3 个步骤工作。首先,我们使用 3 个函数(substring-after、substring-before 和 string-length)获得第二项的长度。空格用作分隔符。然后我们用 2 个函数(substring-before 和 string-length)得到第一项的长度。空格用作分隔符。最后我们使用 susbstring 来提取我们需要的内容。语法:fn(元素的内容,提取的起始位置(1),结束位置(text1的长度+text2的长度)+1(空格分隔符))。

    您可以用您的 XPath 选择器替换 //td(删除末尾的 /text() 并尝试找到更短的表达式)。

    【讨论】:

    • 非常感谢您抽出宝贵时间提供帮助,看到它应用于我的问题使一切都变得更加清晰并且运行良好。
    猜你喜欢
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    • 2012-01-01
    相关资源
    最近更新 更多