从标签之间提取文本的有效方法

2024-05-16 08:56:38 发布

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

假设我有这样的东西:

var = '<li> <a href="/...html">Energy</a>
      <ul>
      <li> <a href="/...html">Coal</a> </li>
      <li> <a href="/...html">Oil </a> </li>
      <li> <a href="/...html">Carbon</a> </li>
      <li> <a href="/...html">Oxygen</a> </li'

提取标签之间文本的最佳(最有效)方法是什么?我应该用正则表达式吗?我目前的技术依赖于在li标记上拆分字符串并使用for循环,只是想知道是否有一种更快的方法来实现这一点。


Tags: 方法标记文本varhtmlli标签ul
3条回答

您可以使用Beautiful Soup来完成这类任务。它非常简单,易于安装,并且有大量文档。

您的示例中有一些li标记未关闭。我已经做了更正,这是如何得到所有的李标签

from bs4 import BeautifulSoup

var = '''<li> <a href="/...html">Energy</a></li>
    <ul>
    <li><a href="/...html">Coal</a></li>
    <li><a href="/...html">Oil </a></li>
    <li><a href="/...html">Carbon</a></li>
    <li><a href="/...html">Oxygen</a></li>'''

soup = BeautifulSoup(var)

for a in soup.find_all('a'):
  print a.string

它将打印:

Energy
Coa
Oil
Carbon
Oxygen

有关文档和更多示例,请参见美化组doc

如果您只是在分析了标记中的内容之后,请尝试使用xpath,例如

for text in var.xpath_all(".//ul/li"):
     text = li.xpath('.//a/text()')
     print text

您还可以使用urllib、BeautifulSoup等

从标记语言中提取信息的推荐方法是使用解析器,例如Beautiful Soup是一个不错的选择。Avoid using regular expressions对于这个,它不是适合这个工作的工具!

相关问题 更多 >