python - 是否可以使用 BeautifulSoup 获取没有类或 ID 的标签?

标签 python beautifulsoup

我有数千个 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> 吗?标签?

最佳答案

你可以为classid设置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/

相关文章:

python - 如何使用 pandas 在 Latex 中输出多索引 DataFrame?

python - 计算每一行的大写字母

python - web2py:一个 View 中的多个表单

python - 我正在使用 django 和 beautiful soup 尝试获取链接,但它不起作用

Python BeautifulSoup 解析表 Yahoo Fantasy Football 数据

python - 删除不必要的内部标签

python - 无法从 zillow 网站上删除某些元素

Python - 从 url 保存图像

python - 最好使用元组或 numpy 数组来存储坐标

python - 正则表达式不匹配