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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Python中的BeautifulSoup解析多个项目相关的知识,希望对你有一定的参考价值。

我正在尝试从网站解析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”做同样的事情,但我只得到一个项目,我想要所有这些项目。

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

答案

如果你的问题中的代码,你会遇到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

以上是关于使用Python中的BeautifulSoup解析多个项目的主要内容,如果未能解决你的问题,请参考以下文章

[Python]BeautifulSoup安装与使用

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

python爬虫学习记录解析库的使用——BeautifulSoup

python中的BeautifulSoup使用小结

如何在python中忽略BeautifulSoup解析器中的换行符

Python爬虫:BeautifulSoup库