【问题标题】:Xpath, selecting text from B inside div while also taking normal textXpath,从 div 内的 B 中选择文本,同时获取普通文本
【发布时间】:2018-03-14 05:45:21
【问题描述】:

基本上我有类似这样的html:

<div>
    <p>
        <b>1</b> Communication
    </p>
    <p>
        <b>2</b> Errors
    </p>
    ...
</div>

我正在尝试(使用 Scrapy)是这样的:

response.xpath("//div//p//text()")

但是这会返回一个列表,例如

[
    "1",
    "Communication",
    "2",
    "Errors"    
]

我想要类似的东西:

[
    "1 Communication",
    "2 Errors"
]

这里的任何帮助将不胜感激。我试图找出一种忽略 b 标签的方法,但我找不到任何真正有效的方法。我不能只加入列表索引的原因是因为并非我需要解析的每个 html 都像这样工作。我想使用一些可以忽略 b 标签(如果它们存在)的东西,而在任何情况下都只是获取 p 中的文本。谢谢!

【问题讨论】:

    标签: python html xpath scrapy


    【解决方案1】:

    如果您的一般模式是忽略 &lt;b&gt; 标签,您可以使用 w3lib 删除这些标签并从结果中构造新的响应。比如:

    import w3lib
    import scrapy
    
    new_body = w3lib.html.remove_tags(response.body, which_ones=('b'))
    new_response = scrapy.http.HtmlResponse(url=response.url, body=new_body)
    

    new_response 现在包含原始响应,但删除了 &lt;b&gt; 标记。然后,您可以使用提取逻辑而无需考虑它们。

    【讨论】:

    • 这正是我所寻求的。感谢您在此提及!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-12
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    • 2013-06-12
    • 2013-10-01
    • 1970-01-01
    相关资源
    最近更新 更多