Seite 1 von 1

erste Schritte mit "scraping"

Verfasst: Samstag 27. November 2021, 16:26
von PaddyRT
Hallo,

mit wenig Code könnte ich einige interessante Dinge tun und experimentiere deshalb mit "requests" bzw. "lxml":

Code: Alles auswählen

from lxml import html
import requests

Seite = requests.get('https://packages.debian.org/stable/')
Baum = html.fromstring(Seite.content)

Knospen = Baum.xpath('<dt><a href=')
worauf ich den für mich unverständlichen Traceback bekomme:
File "/storage/python/package-parse/./categolist.py", line 9, in <module>
Knospen = Baum.xpath('<dt><a href=')
File "src/lxml/etree.pyx", line 1582, in lxml.etree._Element.xpath
File "src/lxml/xpath.pxi", line 305, in lxml.etree.XPathElementEvaluator.__call__
File "src/lxml/xpath.pxi", line 225, in lxml.etree._XPathEvaluatorBase._handle_result
lxml.etree.XPathEvalError: Invalid expression
Könnte mir bitte jemand ein paar erklärende Worte schicken? :)


Viele Grüße,
Paddy

Re: erste Schritte mit "scraping"

Verfasst: Samstag 27. November 2021, 16:38
von __deets__
Du musst dir ein Tutorial zur XPath-Sprache anschauen. Was du da eingegeben hast ist kein XPath, sondern ein HTML-Fragment. Ein Ausdruck in der Art "//dt/a" oder so waere eher korrekt. Aber das haengt natuerlich auch davon ab, was genau du machen willst.

Re: erste Schritte mit "scraping"

Verfasst: Montag 29. November 2021, 18:11
von PaddyRT
Noch immer knappse ich an dem Vorhaben, eine Webseite des Debian Projektes nach Sub-Strings wie '<dt><a href=' zu durchsuchen, um diese dann eine Liste aufzunehmen.

Bisher habe ich zwei Zeilen:

Code: Alles auswählen

page = requests.get('https://packages.debian.org/stable/')
Diese Zeile verstehe ich ungefähr so wie das Datei Handle, oder erfolgt durch das "get" bereits ein herunterladen der Seite?

Code: Alles auswählen

tree = html.fromstring(page.content)
Die gesamten Daten die der Server schickt landen in "tree" und liegen dort als "HTML Element" Objekte vor?

Jedenfalls der wesentliche dritte Schritt fehlt mir. Könnte mir vielleicht doch jemand auf die Sprünge helfen?

Re: erste Schritte mit "scraping"

Verfasst: Montag 29. November 2021, 18:21
von __deets__
Das get holt bereits die Seite ab. Und dann hast du ein XML-Dokument in tree, auf dem du arbeiten kannst. ZB mit XPath. Mit substrings hingegen nicht.

So holt man die Attribute href aller Links unterhalb eines dt-elements da raus.

Code: Alles auswählen

from lxml import html
import requests

req = requests.get('https://packages.debian.org/stable/')
document = html.fromstring(req.content)

for link in document.xpath("//dt/a"):
    print(link.attrib["href"])