使用Python中的BeautifulSoup解析多个项目

问题描述 投票:0回答:1

我正在尝试从网站解析HTML,其中有多个元素具有相同的类ID。我似乎无法找到解决方案;我设法得到一个项目但不是全部。

这里有一些我想解析的HTML:

<h1>Synonymes travail</h1>
<div class="container-bloc1">
    <strong> Nom</strong>
    <br/>
    -
    <i><a class="lien2" href="/fr/accouchement.html"> accouchement </a></i>
    :
    <a class="lien3" href="/fr/gésine.html"> gésine</a>
    <br/>
    -
    <i> <a class="lien2" href="/fr/action.html">  action </a></i>
    :
    <a class="lien3" href="/fr/activité.html"> activité</a>
    ,
    <a class="lien3" href="/fr/labeur.html"> labeur</a>
</div>

在Python中,我这样写:

from bs4 import BeautifulSoup
import requests
import csv

source = requests.get("http://www.synonymes.net/fr/travail.html").text

soup = BeautifulSoup(source, "lxml")

for synonyme in soup.find_all("div", class_="container-bloc1"):
    print(synonyme)

synonymesdumot = synonyme.find("a", class_="lien2").text
    print(synonymesdumot)

for synonymesautres in synonyme.find_all("a", class_="lien3").text:
    print(synonymesautres)

第一部分是工作,因为HTML文件中只有一个“lien2”。我可以为“lien3”做同样的事情,但我只得到一个项目,我想要所有这些项目。

我在这做错了什么?谢谢你的帮助!

python html parsing beautifulsoup
1个回答
0
投票

如果你的问题中的代码,你会遇到AttributeError,因为.find_all()的输出是一个标签集合(更具体地说是ResultSet)没有属性text;但它的每个元素都是type bs4.Element.Tag。因此,您需要为for循环中的每个标记获取text属性:

for synonymesautres in synonyme.find_all("a", class_="lien3"):
    print(synonymesautres.text)

输出:

le
travail
manque
de
travail
travail
fatigant
© www.soinside.com 2019 - 2024. All rights reserved.