beautifulsoup href wird nicht gefunden

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Python_Stefan
User
Beiträge: 7
Registriert: Montag 21. Dezember 2020, 18:07

Hallo zusammen,

ich versuche verschiedene Rezepte in einer Datei zusammenzustellen. Meine Idee ist es beautifulsoup dafür zu verwenden. Ich suche auf der Seite: "https://eatsmarter.de/suche/rezepte?op=Suchen". Mein erster Schritt ist es, die Links von den einzelnen Rezepten zu generieren.

In der ersten for-Schleife werden die a-Tags mit der Klasse "teaser-wrapper-link" gefunden. Diese beginnen so:

<a class="teaser-wrapper-link" href="/rezepte/griechisches-gemuese-mit-feta-0" rel="follow" title="Griechisches Gemüse mit Feta Rezept">
<div class="teaser teaser-search-result-mobile teaser-node-recipe">
<div class="teaser-left">
<i class="fa fa-play-circle"></i><span class="cookbook_link_placeholder" data-rnid="654875"></span>
<picture title="Griechisches Gemüse mit Feta Rezept">
<!--[if IE 9]><video style="display: none;"><![endif]-->
...

Zu sehen ist in diesem Abschnitt der Tag "href", den ich haben möchte. Mein Code in der zweiten for-Schleife ergibt aber ein leeres Ergebnis und findet den href-Tag nicht. Auf einer anderen Seite hat der Code einwandfrei funktioniert, aber auf der genannten Seite nicht.

Kann mir jemand sagen woran das liegt und was ich machen kann um den href-Tag zu finden und diesen in der Liste zu speichern?

Vielen Dank im Voraus

Code: Alles auswählen

import requests
from bs4 import BeautifulSoup
import lxml
import pandas as pd

baseurl = 'https://eatsmarter.de/'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36'
}

r = requests.get('https://eatsmarter.de/suche/rezepte?op=Suchen')
soup = BeautifulSoup(r.content, 'lxml')

rezeptliste = soup.find_all('a', class_ = 'teaser-wrapper-link') #findet den a-Tag und die Klasse, in welcher der Link steht, den ich haben möchte.
rezepte = []

for menues in rezeptliste:
    print(menues)
    for link in menues.find_all('a',href=True): #der Link steht im a-Tag bei href.
        rezepte.append(link['href'])
print(rezepte)
Benutzeravatar
__blackjack__
User
Beiträge: 14054
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Python_Stefan: Wenn Du die "href"-Werte von diesen Links haben willst, dann musst Du auf diese Links zugreifen. Und nicht *innerhalb* der <a>-Elemente nach weiteren <a>-Elementen suchen. Das sind nämlich keine — weder mit noch ohne "href"-Attribut.

`menues` ist da auch der falsche Name, denn das ist ja jeweils nur *ein* Menü/Rezept, nicht mehrere.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Python_Stefan
User
Beiträge: 7
Registriert: Montag 21. Dezember 2020, 18:07

@__blackjack__: vielen vielen Dank für deine Antwort! Damit hast du mir sehr weitergeholfen. Jetzt habe ich es.
Antworten