我想要转换一个简单的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)
答案 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
个对象没有name
或children
等属性,所以如果你像上面那样走遍整个树,我需要检查你是否真的有一个标签(我正在使用上面的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