V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zyqf
V2EX  ›  问与答

用 xpath 获取 p 标签所有文本内容, a 标签内容处理问题

  •  
  •   zyqf · 2017-04-02 15:56:41 +08:00 · 12572 次点击
    这是一个创建于 2601 天前的主题,其中的信息可能已经有所发展或是发生改变。

    完整链接: http://cn.nytimes.com/business/20170330/china-walt-disney-fake/

    欲处理文本

    <p class="paragraph">该公司表示,<a rel="nofollow" target="_blank" 
    
    href="http://www.thepaper.cn/newsDetail_forward_1625731">今年 2 月</a>
    
    ,中国新闻网站澎湃报道称,孟德楷已与中国的几个城市签署项目协议,迪士尼因此展开调查。</p>
    
    

    xpath 语法

    //*[@id="content"]/p/text() | //*[@id="content"]/p/a/text()
    

    得到的结果是 list :

    
    ['该公司表示,',
    '今年 2 月',
    ',中国新闻网站澎湃报道称,孟德楷已与中国的几个城市签署项目协议,迪士尼因此展开调查。']
    
    

    但我想要的结果是:

    ['该公司表示,今年 2 月,中国新闻网站澎湃报道称,孟德楷已与中国的几个城市签署项目协议,迪士尼因此展开调查。']
    

    查来半天没找到解决的办法,无奈做回伸手党,各位有什么高见呢?

    PS :要用 xpath 语法完成,不是获取结束后,再用代码处理成一个元素

    7 条回复    2017-04-08 14:17:38 +08:00
    starvedcat
        1
    starvedcat  
       2017-04-02 16:18:50 +08:00   ❤️ 1
    //*[@id="content"]/p[a]/string-join(text())
    starvedcat
        2
    starvedcat  
       2017-04-02 16:19:32 +08:00
    我也是刚 google 的,这个网页好像有点用处: https://www.w3.org/TR/xpath-functions/
    zyqf
        3
    zyqf  
    OP
       2017-04-02 16:53:48 +08:00
    @starvedcat 表达式无效唉

    lxml.etree.XPathEvalError: Invalid expression
    starvedcat
        4
    starvedcat  
       2017-04-02 16:58:41 +08:00
    @zyqf 这我就不知道了。。。我是在 http://www.freeformatter.com/xpath-tester.html 这里测试通过的
    zyqf
        5
    zyqf  
    OP
       2017-04-02 18:16:44 +08:00
    @starvedcat 不管怎么样,得到了一种新思路,谢谢你~
    SoloCompany
        6
    SoloCompany  
       2017-04-03 00:22:54 +08:00
    可能你对 xpath 的行为理解有点错误吧
    正确的表达式一个就足够了 //*[@id="content"]/p
    如果你 select 的标的是 nodelist 那么得到的是所有 p 标签
    如果你 select 的标的是 string (默认),就已经是所有文本 join 之后的结果
    所以你应该修正你的 select 标的
    zyqf
        7
    zyqf  
    OP
       2017-04-08 14:17:38 +08:00 via Android
    @SoloCompany 感谢您,现在才看到。上次已经解决了,直接用

    //*[@id="content"]/p//text()
    就好了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6131 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 01:57 · PVG 09:57 · LAX 18:57 · JFK 21:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.