Seite 1 von 1

crawlen (code)

Verfasst: Samstag 12. September 2020, 22:21
von nexuz89
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.

Re: crawlen (code)

Verfasst: Samstag 12. September 2020, 23:21
von ElektroBerry
Eine Lösung:

Code: Alles auswählen

soup.find("strong", text="Artikelnummer").find_next("p").text.strip()

Re: crawlen (code)

Verfasst: Samstag 12. September 2020, 23:30
von __blackjack__
@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'

Re: crawlen (code)

Verfasst: Montag 14. September 2020, 18:14
von nexuz89
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

Re: crawlen (code)

Verfasst: Montag 14. September 2020, 19:42
von ElektroBerry
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)