【问题标题】:Extracting the value by xpath in python between tags在标签之间通过python中的xpath提取值
【发布时间】:2014-11-23 03:48:08
【问题描述】:

我想提取下图中我提到的参数...

我试过的是:

url='http://site.ir'
content=requests.get(url).content
tree = html.fromstring(content)
print [e.text_content() for e in tree.xpath('//div[@class="grouptext"]/????')]

这不在标签 span 中,也不在标签 br 中。

图片:

更新

想象一下我有:

out=""" <div class="groupinfo">
    <div class="grouptext">
        <span style="color:#5f0101">
            span tag contents
        </span>
        WHAT I WANT
        <br></br>
    </div>
</div> <div class="groupinfo">
    <div class="grouptext">
        <span style="color:#5f0101">
            span tag contents
        </span>
        WHAT I WANT(1)
        <br></br>
    </div>
</div> 
imagine I have: out=""" <div class="groupinfo">
    <div class="grouptext">
        <span style="color:#5f0101">
            span tag contents
        </span>
        WHAT I WANT(2)
        <br></br>
    </div>
</div> <div class="groupinfo">
    <div class="grouptext">
        <span style="color:#5f0101">
            span tag contents
        </span>
        WHAT I WANT(3)
        <br></br>
    </div>
</div> """"""

【问题讨论】:

    标签: python html xpath html-parsing lxml


    【解决方案1】:

    看起来这是div 元素的文本内容。不幸的是,“你想要什么”是不可读的,因为你在上面写了“我想要什么”。

    您(最有可能)寻找的是一个文本节点,它实际上不是“标签之间”,它是div[@class="grouptext"]element 的子节点。可能有多个这样的文本节点作为该 div 的子节点。

    试试:

    print [e.text_content() for e in tree.xpath('//div[@class="grouptext"]')]
    

    或者

    print tree.xpath('//div[@class="grouptext"]/text()')
    

    也许也可以,但我对 Python 不是很熟悉。

    【讨论】:

    • 你的意思是没有办法提取我提到的参数?
    • 我可以说:提取 span 之后和 br 之前的所有内容吗?
    • @MortezaLSC 我不确定您是否理解问题在于您确实没有准确地显示了我们需要查看的 HTML 部分。请发布真实代码,不要在图像中发布,也不要在关键部分上乱写。此外,显示该 div 的全部内容,而不仅仅是开头。
    【解决方案2】:

    另一种选择是让 以下span 文本 sibling

    //div[@class="grouptext"]/span[1]/following-sibling::text()
    

    演示:

    from lxml import html
    
    data = """
    <div class="groupinfo">
        <div class="grouptext">
            <span style="color:#5f0101">
                span tag contents
            </span>
            WHAT I WANT
            <br></br>
        </div>
    </div>
    """
    
    tree = html.fromstring(data)
    print tree.xpath('//div[@class="grouptext"]/span[1]/following-sibling::text()')[0].strip()
    

    打印:

    WHAT I WANT
    

    对于更新后的示例,这对我有用:

    for result in tree.xpath('//div[@class="grouptext"]/span/following-sibling::text()'):
        print result.strip()
    

    打印:

    WHAT I WANT
    
    WHAT I WANT(1)
    
    WHAT I WANT(2)
    
    WHAT I WANT(3)
    

    【讨论】:

    • 好的,谢谢...如果在这个页面中我有例如 20 个这样的结构...我怎样才能提取所有这些结构???
    • 我的意思是我想要:text()')[0].strip() --- text()')[3].strip() ---- text()')[6].strip() ---- text()')[9].strip() .... etc
    • @MortezaLSC 据我了解,省略 span 旁边的[1] - 让它检查div 中的每个span。如果这不是您的意思,请提供相关的 HTML 代码,以便我可以使用它并为您提供解决方案。谢谢。
    • 谢谢我接受了你的回答...我认为这超出了 xpath 结构...是吗?
    • @MortezaLSC 好的,仅供参考,我已经用您提供的更新示例的解决方案更新了答案。看看这个。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-06
    • 2013-10-14
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 2015-08-16
    相关资源
    最近更新 更多