如何从美丽的汤4解析的元素中获取名称

时间:2013-07-13 22:30:56

标签: python html-parsing beautifulsoup

我想要转换一个简单的HTML文件。根据标签的类别,我需要修改内容:

<HTML>
<HEAD>
<TITLE>Eine einfache HTML-Datei</TITLE>
<meta name="description" content="A simple HTML page for BS4">
<meta name="author" content="Uwe Ziegenhagen">
<meta charset="UTF-8">
</HEAD>
<BODY>

<H1>Hallo Welt</H1>

<p>Ein kurzer Absatz mit ein wenig Text, der relativ nichtssagend ist.</p>

<H1>Nochmal Hallo Welt!</H1>

<p>Schon wieder ein kurzer Absatz mit ein wenig Text, der genauso nichtssagend ist wie der Absatz zuvor.</p>

</BODY>
</HTML>

我如何通过BS4树并根据我是否有“H1”或“p”或其他类别的标签进行某些修改?我想我需要一些switch语句来决定每个元素如何处理它。

from bs4 import BeautifulSoup

with open ("simple.html", "r") as htmlsource:
  html=htmlsource.read()

soup = BeautifulSoup(html)

for item in soup.body:
  print(item)

2 个答案:

答案 0 :(得分:1)

BeautifulSoup标记对象具有name属性,您可以检查该属性。例如,这是一个函数,它通过将一个字符串“Done with this”+相应的标记名称添加到一个postwalk中的每个节点来转换树:

def walk(soup):
    if hasattr(soup, "name"):
        for child in soup.children:
            walk(child)
        soup.append("Done with this " + soup.name)

NB。表示文本内容的NavigableString个对象和代表注释的Comment个对象没有namechildren等属性,所以如果你像上面那样走遍整个树,我需要检查你是否真的有一个标签(我正在使用上面的hasattr调用;我想你可以检查类型是bs4.element.Tag)。

答案 1 :(得分:0)

试试这段代码:

from bs4 import BeautifulSoup
with open ("simple.html", "r") as htmlsource:
    html=htmlsource.read()

soup = BeautifulSoup(html)

for item in soup.body:
    print(item)

# You will select all of elements in the HTML page
elems = soup.findAll()
for item in elems:
   try:
      # Check if the class element is equal to a specified class
      if 'myClass' == item['class'][0]:
         print(item)

     # Check if the tagname element is equal to a specified tagname
     elif 'p' == item.name:
        print(item)

  except KeyError:
     pass