crawlen (code)

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
nexuz89
User
Beiträge: 18
Registriert: Montag 27. Juli 2020, 10:59

Hallo zusammen, ich benötige Hilfe von euch !

Ich habe Probleme von dieser (https://www.combi.de/Meienburg_Bananen- ... 11309.html) Seite die Artikelnummer zu scrappen.

Mein momentaner code:

Code: Alles auswählen

article_no = soup.find('p',class_='')
    if article_no is not None:
        article_no = article_no.text.strip()
    print(article_no)
    
ist nur ein ausschnitt vom Code!

Leider bekomme ich nur das erste Ergebnis von der p klasse "Diese knackig gerösteten Bananenchips sind ein leckerer Energielieferant - schonend getrocknet, gezuckert und aromatisiert." ausgespuckt.

Ich weis leider nicht wie ich zu der Artikelnummer komm.

Ich bedanke mich schon für eure Hilfe.
ElektroBerry
User
Beiträge: 31
Registriert: Samstag 16. Mai 2020, 18:52

Eine Lösung:

Code: Alles auswählen

soup.find("strong", text="Artikelnummer").find_next("p").text.strip()
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@nexuz89: `find()` sucht halt das erste passende Element. Und wenn Du effektiv nur nach <p>-Elementen suchst, dann eben das erste <p>-Element.

An Klassen und IDs sehe ich da nichts an dem man sich wirklich gut orientieren könnte, also könnte man zum <strong>Artikelnummer</strong> navigieren und von da aus das ersten <p>-Geschwister-Element suchen:

Code: Alles auswählen

In [438]: soup.find("strong", text="Artikelnummer").find_next_sibling("p").text.strip()                                                               
Out[438]: '4502111309'
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
nexuz89
User
Beiträge: 18
Registriert: Montag 27. Juli 2020, 10:59

super vielen dank,
ich hab jetzt bei einer anderen seite ein problem :/

ich möchte den Verkaufsinhalt scrappen (https://www.netto-online.de/kornmuehle- ... 2154303000) bei dieser seite

mein code:

Code: Alles auswählen

 Weight1=soup.find('div',class_='food-labeling__text')
    if Weight1 is not None:
        Weight2=Weight1.find('p',class_='')
        if Weight2 is not None:
            Weight=Weight2.text.strip()
            if len(Weight) >4:
                Weight = Weight[1].text.strip()
    else:
        Weight='N/A'
    print(Weight)
wäre super nice wenn ihr mir helft

lg
ElektroBerry
User
Beiträge: 31
Registriert: Samstag 16. Mai 2020, 18:52

Lösungsvorschlag 1 ohne Regex:

Code: Alles auswählen

for line in soup.find_all('div',class_='food-labeling__text'):
    if "Verkaufsinhalt:" in str(line):
        weight = (" ".join(line.p.text.split()[-2:]))
        break
else:
    weight = None
print(weight)
Lösungsvorschlag 2 mit Regex:

Code: Alles auswählen

import re
for line in soup.find_all('div',class_='food-labeling__text'):
    weight = re.search(r"(?<=Verkaufsinhalt.)(.*?)(\Z)", line.text)
    if weight:
        weight = weight[0].strip()
        break
print(weight)
Antworten