Webscraping

so, dann jetzt hier mit vollem namen:

Python:
import requests
from lxml.html.soupparser import fromstring

base_url = "https://www.raceherens.ch"


class Cow(object):

    def __init__(self, link, max_depth=3):
        r = requests.get(f'{base_url}/{link}')
        self._max_depth = max_depth
        self._root = fromstring(r.text)
        self._mutter = self._root.xpath("//div[@class='row']/div/strong[text()='Mutter']/../../div/a")
        self._vater = self._root.xpath("//div[@class='row']/div/strong[text()='Vater']/../../div/a")

    def _get_parent(self, parent):
        if self._max_depth:
            try:
                return Cow(parent[0].attrib['href'], self._max_depth - 1)
            except Exception as e:
                print("error getting parent:", e)

    @property
    def name(self):
        name1 = self._root.xpath("//div[@class='detail-title']/h1")[0].text.strip()
        name2 = self._root.xpath("//div[@class='uptitle']")[0].text.strip()
        return f"{name1} - {name2}"

    @property
    def mutter(self):
        return self._get_parent(self._mutter)

    @property
    def vater(self):
        return self._get_parent(self._vater)


def print_cow(cow, comment="", i=0):
    print(i * " ", cow.name, comment)
    if cow.mutter and cow.vater:
        print_cow(cow.mutter, "(mutter)", i+2)
        print_cow(cow.vater, "(vater)", i+2)


print_cow(
    Cow("/de/liste-des-vaches/120161212639-321433", max_depth=3)
)

da kommt dann sowas raus:
Code:
 TINETTE - TVD 120161212639
   TAMINA - TVD 120119253271 (mutter)
     PARADE - TVD 120061238685 (mutter)
       PALOMA - TVD 410058007357 (mutter)
       RAMBO - TVD 120031196618 (vater)
     $BREONA - TVD 120055309759 (vater)
       CREOLA - TVD 120035560897 (mutter)
       BIDUL - TVD 120055309674 (vater)
   NAPOLEON - TVD 120132847709 (vater)
     NUAGE - TVD 120118244379 (mutter)
       NUBIE - TVD 120099535374 (mutter)
       PLUMO - TVD 120099238558 (vater)
     NINO - TVD 120104514172 (vater)
       NEGUS - TVD 410059030699 (mutter)
       MILORD - TVD 120099585454 (vater)

den unterschied findest du in def name(self). der name wird aus den zwei teilen zusammen gesetzt, die hier zu finden sind:
1716735453979.png
 
  • Gefällt mir
Reaktionen: Romeo88
Ah super!!! Viele vielen Dank!

Jetzt werde ich beide Scripte mal studieren und dann werde ich es dann hoffentlich wohl endlich begreifen.
Python und dazu noch Webscraping ist halt für mich noch komplett Neuland.

Ich hoffe dass ich dich nicht zu viel genervt habe?!

Wünsche einen schönen Abend
 
kein problem :) als stichpunkte kannst du dir (python-spezifisch) "requests" mitnehmen als mittel, um http-abfragen zu machen und "xpath", um elemente innerhalb des html zu finden (das ist allgemein, "lxml" bzw. "beautifulsoup" ist wieder python-spezifisch).
 
  • Gefällt mir
Reaktionen: Romeo88
Zurück
Oben