Webscraping

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
Aura
User
Beiträge: 11
Registriert: Mittwoch 28. Oktober 2020, 14:29

Hallo zusammen,

ich würde gerne eine bot haben der mir auf einer Website verschiedene Produkte sucht und mir anshließend gewisse Informationen zu dem Produkt auf der Website ausgibt.

Kann mir da einer weiterhelfen ?

LG Aura
Benutzeravatar
__blackjack__
User
Beiträge: 14053
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Aura: In wiefern? Was ist das konkrete Problem dabei?
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Das lässt sich mit requests und BeauftifulSoup4 machen, oder auch mit Selenium. Schau dir paar Beispiele an oder die Dokumentationen und leg los, wenn du an einer Stelle nicht weiter kommst dann kannst du den Code gerne hier posten und wir versuchen da zu helfen. Ohne irgendwelche Informationen kann dir keiner Helfen.
fischer-klaus3
User
Beiträge: 27
Registriert: Donnerstag 17. September 2020, 08:07

@Aura ich habe mal einen kleinen Bot geschrieben, der hat mir dann Preise und die Artikelbeschreibung sowie die Bilder in eine CSV Datei geschrieben. Ich kann dir gerne den Quellcode zukommen lassen.
Aura
User
Beiträge: 11
Registriert: Mittwoch 28. Oktober 2020, 14:29

import requests
from bs4 import BeautifulSoup


URL = 'https://www.asdf.de'
page = requests.get(URL)


soup = BeautifulSoup(page.content, 'html.parser')


results = soup.find(id == 'h3')


print(results.text)

Ich bekomme immer den gesamten html Text ausgeworfen -- will aber nur den text von "h3" haben.

Wenn einer weiß wie ich den bot automatisiert ein Produkt in der Suchfunktion suchen lassen könnte und mir dann den Text ausgeben könnte wäre es mehr als hilfreich :)

LG Aura
Aura
User
Beiträge: 11
Registriert: Mittwoch 28. Oktober 2020, 14:29

Der bot soll auf die Website gehen und dann in der Suchfunktion eine Artikelnummer suchen und danach mir im html text den text ausgeben -- und dieser dann in einer Datei speicher mit der zugehöhrigen Artikelnummer.

Als Beispiel: Geh auf Mediamarkt suche mir den Artikel und gebe mir alle (in dem Fall Technische Daten) aus. (Prozessor, Arbeitsspeicher usw.) und dieses soll er mir in einer Datei speicher mit der dazugehöhrigen Artikelnummer.

LG
Benutzeravatar
__blackjack__
User
Beiträge: 14053
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Aura: Interessantes verhalten von `BeautifulSoup.find()`. Du rufst das mit einem falschen Argument auf. Die eingebaute `id()`-Funktion ist immer ungleich irgendeiner Zeichenkette. Vermutlich sollte `id` ein Schlüsselwortargument sein. Wobei der Wert "h3" auch ein bisschen verdächtig ist — reden wir hier von dem ersten <h3>-Element oder gibt es tatsächlich ein Element mit einem `id`-Attribut mit dem Wert "h3"?

Der Namen `page` ist ein bisschen unpassend. Das Objekt enthält ein bisschen mehr als nur die Seite, oder unter Umständen auch gar keine Seite. `response` wäre passender. Und ich würde da auch die Antwort prüfen ob die überhaupt okay ist, oder ob der Server einen Fehler zurückgemeldet hat.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Aura
User
Beiträge: 11
Registriert: Mittwoch 28. Oktober 2020, 14:29

Ich brauche das h3 element und die untergeordneten tr bzw td elemente da in diesen der benötigte Text steht :) das mit der Id hat im grunde keinen wert also er findet mir da nichts ... die antwort die ich bekomme ist im grunde der ganze html- text der auf der Seite erstichtlicht steht :) also der gesuchte Text befindet sich auch darunter.

Wie kann ich das auf ein bestimmtes element eingränzen... ist mir noch ein fraglich :)

LG
Sirius3
User
Beiträge: 18273
Registriert: Sonntag 21. Oktober 2012, 17:20

Ich kann auf die Seite www.asdf.de nicht zugreifen, kann also auch nichts über den Aufbau sagen. Innerhalb eines h3-Elements sind selten tr- bzw td-Elemente. Du mußt also schon die genau Struktur der Seite kennen.

Schon auf der Quick-Start-Seite stehen die wichtigsten Sachen um anzufangen. Generell sollte man wissen, dass in Python zwei Gleichheitszeichen etwas anderes bedeuten als ein Gleichheitszeichen.
Benutzeravatar
__blackjack__
User
Beiträge: 14053
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Aura: Du suchst da weder nach einem `id`-Attribut noch nach irgend etwas mit "h3". Du vergleichst die `id()`-Funktion mit der Zeichenkette "h3" — was halt immer `False` ist:

Code: Alles auswählen

In [26]: id                                                                     
Out[26]: <function id(obj, /)>

In [27]: id == "h3"                                                             
Out[27]: False
Effektiv rufst Du also ``page.find(False)`` auf. Was keinen Sinn macht. Wenn Du nach dem ersten <h3>-Element suchen willst und überhaupt nicht nach einem `id`-Attribut, dann musst Du ``page.find("h3")`` ausführen.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Aura
User
Beiträge: 11
Registriert: Mittwoch 28. Oktober 2020, 14:29

import requests
from bs4 import BeautifulSoup
from pip._vendor.urllib3 import response



URL = 'https://www.brack.ch/hp-notebook-250-g7 ... earch=true'
response = requests.get(URL)


soup = BeautifulSoup(response.content, 'html.parser')


Beschreibung = soup.find('div', class_='pdp__contentSection-leftSide')
Spezifikationen = soup.find('div', id = 'specifications-block')
Artikelnummer = soup.find('div',xmlns = 'http://www.w3.org/1999/xhtml' )


print(Artikelnummer.text)


Danke für die Hilfestellungen. :) Wie man merkt bin ich etwas neu auf dem Gebiet.

So funktioniert es. hab leider das Problem dass ich bei der Beschreibung nur den ersten Absatz will und die weiteren Beschreibungen alle mit dem selben Element angeführt sind. Ich will aber nur den ersten. Bin da noch nicht dahinter gekommen wie er mir nur den ersten Absatz ausgibt :)
Aura
User
Beiträge: 11
Registriert: Mittwoch 28. Oktober 2020, 14:29

Das gleiche ist auch bei der Artikelnummer....
Antworten