Разбор множественных элементов с использованием BeautifulSoup в Python - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь проанализировать HTML с веб-сайта, где есть несколько элементов с одинаковым идентификатором класса. Я не могу найти решение; Мне удается получить один предмет, но не все.

Вот фрагмент 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", но я бы получил только один предмет, и я хочу их всех.

Что я здесь не так делаю? Спасибо за помощь ребята!

1 Ответ

0 голосов
/ 12 ноября 2018

Если вы используете код, который соответствует вашему вопросу, вы сталкиваетесь с AttributeError, потому что вывод .find_all() представляет собой набор тегов (точнее, ResultSet), который не имеет атрибута text;но каждый из его элементов, которые имеют type bs4.Element.Tag, делают.Таким образом, вам нужно получить атрибут text для каждого из тегов внутри цикла for:

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

Вывод:

le
travail
manque
de
travail
travail
fatigant
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...