python提取标签中的内容

抓取了一个网页,网页中一部分内容如下:
网页数据

我使用如下代码:

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标记之后的内容都不能输出,请问该如何解决?

回答:

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>

回答:

#!/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 文档

以上是 python提取标签中的内容 的全部内容, 来源链接: utcz.com/a/165648.html

回到顶部