我有数千个 HTML 站点,我正试图从这些站点中过滤文本。
我正在用漂亮的汤做这个。 get_text()
从这些网站给我很多不必要的信息。
因此我写了一个循环:
l = []
for line in text5:
soup = bs(line, 'html.parser')
p_text = ' '.join(p.text for p in soup.find_all('p'))
k = p_text.replace('\n', '')
l.append(k)
但是这个循环给了我以 <p
开头的标签中的所有内容.
例如:
我想要两个普通 <p>
之间的所有东西标签。
但我也从这样的事情中得到了内容:
<p class="header-main__label"> bla ba </p>
.
我可以告诉 BeautifulSoup 只得到普通的 <p>
吗?标签?
最佳答案
你可以为class
和id
设置False
,它会得到没有class
和的标签编号
soup.find_all('p', {'class': False, 'id': False})
或者(单词class_
有_
因为Python中有关键字class
)
soup.find_all('p', class_=False, id=False)
from bs4 import BeautifulSoup as BS
text = '<p class="A">text A</p> <p>text B</p> <p id="C">text C</p>'
soup = BS(text, 'html.parser')
# ----
all_items = soup.find_all('p', {'class': False, 'id': False})
for item in all_items:
print(item.text)
# ---
all_items = soup.find_all('p', class_=False, id=False)
for item in all_items:
print(item.text)
编辑:如果您想要没有任何属性的标签,那么您可以使用 not item.attrs
for item in all_items:
if not item.attrs:
print(item.text)
from bs4 import BeautifulSoup as BS
text = '<p class="A">text A</p> <p>text B</p> <p id="C">text C</p> <p data="D">text D</p>'
soup = BS(text, 'html.parser')
all_items = soup.find_all('p')
for item in all_items:
if not item.attrs:
print(item.text)
关于python - 是否可以使用 BeautifulSoup 获取没有类或 ID 的标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58747286/