python提取标签中的内容

发布于 2022-08-29 16:54:51 字数 530 浏览 10 评论 0

抓取了一个网页,网页中一部分内容如下:
网页数据
我使用如下代码:

import codecs
#coding=utf-8
from lxml import etree
f=codecs.open("1.html","r","utf-8")
content=f.read()
f.close()
tree=etree.HTML(content)
node=tree.xpath("//div[@class='content']")[0]
print node.text.encoding('gbk')

但是只能输出:奥迪阿萨德,第一个em标记之后的内容都不能输出,请问该如何解决?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

眼中杀气 2022-09-05 16:54:51

lxmlelement.text返回的是这个元素第一个节点的内容,所以会出现这样的问题。可以用getText这个辅助方法来解决:

# require lxml
# version: python2
def getText(elem):
    rc = []
    for node in elem.itertext():
        rc.append(node.strip())
    return ''.join(rc)

这里可以直接修改最后一行即可:

import codecs
#coding=utf-8
from lxml import etree

def getText(elem):
    rc = []
    for node in elem.itertext():
        rc.append(node.strip())
    return ''.join(rc)

f=codecs.open("1.html","r","utf-8")
content=f.read()
f.close()
tree=etree.HTML(content)
# 返回的是lxml.etree._Element,可以直接作为getText参数来调用。
node=tree.xpath("//div[@class='content']")[0]
print getText(node).encoding('gbk')

这里的getText只是简单的实现,比如下面的xml文本会打印abdc,应该可以达到你的要求。

<div class="content">
    a<em>b <em>d</em></em>c
</div>
靑春怀旧 2022-09-05 16:54:51
#!/usr/bin/env python3
from bs4 import BeautifulSoup

f = open("1.html", "r")
html = BeautifulSoup( f.read() )
node = html.select(".content")[0]
print( node.prettify() )

html.select(".content")这个可能需要更多的选择器限定一下。另外只是大概写了下BeautifulSoup如何运作的,具体需求可以查看手册:Beautiful Soup 文档

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文