html - python提取标签中的内容
阿神
阿神 2017-04-17 13:09:53
0
2
422

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

我使用如下代码:

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("//p[@class='content']")[0] print node.text.encoding('gbk')

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

阿神
阿神

闭关修行中......

Antworte allen (2)
黄舟

lxml 的element.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("//p[@class='content']")[0] print getText(node).encoding('gbk')

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

ab dc

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

      Neueste Downloads
      Mehr>
      Web-Effekte
      Quellcode der Website
      Website-Materialien
      Frontend-Vorlage
      Über uns Haftungsausschluss Sitemap
      Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!