python 如何忽略< br>标记xpath

7lrncoxx  于 2023-02-21  发布在  Python
关注(0)|答案(3)|浏览(299)
myList = tree.xpath('//div[@id="RM1127"]/div[@class="moreInfo"]/text()')

我正在抓取一个网站的div中的元素,它工作正常,但是在这个div中,有一个<b>标签,myList将这个div的元素作为两个单独的元素返回。

<div class="moreInfo" style="display:none;font-weight:normal; font-size:14px; margin-top:6px; padding:0px 0 0 30px;">

    Over ½ lb. of jumbo shrimp fried golden crisp in a…

    <br></br>

    coleslaw, cocktail & Tartar sauce. …

</div>

html看起来像这样,我没有把'超过半磅的大虾炸成金黄色的脆片'和'凉拌卷心菜,鸡尾酒和鞑靼酱料'作为一个元素放在一起,而是把它们作为一个数组中的单独元素。

toe95027

toe950271#

使用Python XPath + LXML时,只需调用HtmlElement.text_content()即可,请看下面这个完整的示例:

from lxml import etree
import lxml.html    

html  ="""<!DOCTYPE html>
<html>
<body>
    <div id="RM1127">
        <div class="moreInfo" style="">

            Over 1/2 lb. of jumbo shrimp fried golden crisp in a...

            <br>

            coleslaw, cocktail & Tartar sauce

        </div>
    </div>
</body>
</html>"""

dom = lxml.html.fromstring(html)
tags = dom.xpath("""//div[@id="RM1127"]/div[@class="moreInfo"]""")

for e in tags:
    print(e.text_content())

来自doc
lxml.html. html元素.文本内容():

返回元素的文本内容,包括其子元素的文本内容,不带标记。

k5ifujac

k5ifujac2#

尝试以下XPath表达式:

string(//div[@id="RM1127"]/div[@class="moreInfo"])

应用于节点集时,XPath字符串函数返回文档顺序中第一个节点的字符串值。元素节点的字符串值是所有文本节点后代的字符串值的串联。

jxct1oxe

jxct1oxe3#

如果使用scrapy并且不想使用lxml.html,那么我找不到比使用regex更好的方法来删除这些br标签。scrapy文档response = response.replace(body = re.sub(b'</?\s*\s*br\s*/?\s*>',b'',response.body))任何人有更好的方法,请分享。

相关问题