Xpath,从div内的B中选择文本,同时使用普通tex

2024-04-23 15:28:00 发布

您现在位置:Python中文网/ 问答频道 /正文

基本上我有类似的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标签,但是我找不到任何真正有效的方法。我不能将列表索引按2的顺序连接起来的原因是,并不是所有需要解析的html都是这样工作的。我想使用一些可以忽略b标签(如果它们存在的话)的东西,而在任何情况下只获取p中的文本。谢谢!你知道吗


Tags: 方法text文本div列表顺序responsehtml
1条回答
网友
1楼 · 发布于 2024-04-23 15:28:00

如果您的常规模式是忽略<b>标记,那么可以使用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现在包含原始响应,但删除了<b>标记。然后可以使用提取逻辑,而无需考虑它们。你知道吗

相关问题 更多 >