Web Scraping Teil 1

Einführung


Hallo alle zusammen. Vor kurzem hatte ich die Idee, mit einem interessierten Personenkreis darüber zu sprechen, wie Schaber geschrieben werden. Da die meisten Benutzer mit Python vertraut sind, werden alle weiteren Beispiele darauf geschrieben.


Dieser Teil soll diejenigen vorstellen, die sich in diesem Bereich noch nicht ausprobiert haben. Wenn Sie bereits ein fortgeschrittener Leser sind, können Sie sicher weiter scrollen. Um das Muster beizubehalten, würde ich Ihnen raten, diesem Artikel ein wenig Aufmerksamkeit zu schenken.


print('Part 1. Get started')

Werkzeuge


  • Programmiersprache und entsprechende Bibliotheken
    Natürlich ohne sie nirgendwo. In unserem Fall wird Python verwendet. Diese Sprache ist ein ziemlich leistungsfähiges Werkzeug zum Schreiben von Scrapern, wenn Sie sie und ihre Bibliotheken korrekt verwenden können: Anfragen, bs4, json, lxml, re.
  • Entwicklertools
    Jeder moderne Browser verfügt über dieses Dienstprogramm. Persönlich bin ich mit Google Chrome oder Firefox zufrieden. Wenn Sie andere Browser verwenden, empfehle ich, einen der oben genannten zu versuchen. Hier benötigen wir fast alle Tools: Elemente, Konsole, Netzwerk, Anwendung, Debuger.
  • IDE
    , , — , debuger'a . PyCharm JetBrains.


: frontend, backend.


Frontend. HTML , -. : , , , .


Backend. backend api - json xml. , api, , . api -, .


Frontend


, . requests . headers, .. , , . : Kith


import requests

headers = {
    'authority': 'www.kith.com',
    'cache-control': 'max-age=0',
    'upgrade-insecure-requests': '1',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.106 Safari/537.36',
    'sec-fetch-dest': 'document',
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'sec-fetch-site': 'same-origin',
    'sec-fetch-mode': 'navigate',
    'sec-fetch-user': '?1',
    'accept-language': 'en-US,en;q=0.9',
}

session = requests.session()

response = session.get("https://kith.com/collections/mens-footwear", headers=headers)

if response.status_code == 200:
    print("Success")
else:
    print("Bad result")

. (Ctrl+Shift+I) , .
: , , .


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

for element in soup.find_all('li', class_='collection-product'):
    name = element.find('h1', class_="product-card__title").text.strip()
    price = element.find('span', class_="product-card__price").text.strip()
    link = "https://kith.com/" + element.find('a').get('href')


class Prodcut:
    name = str
    price = str
    link = str

    def __init__(self, name, price, link):
        self.name = name
        self.price = price
        self.link = link

    def __repr__(self):
        return str(self.__dict__)

,


import requests
from bs4 import BeautifulSoup

class Prodcut:
    name = str
    price = str
    link = str

    def __init__(self, name, price, link):
        self.name = name
        self.price = price
        self.link = link

    def __repr__(self):
        return str(self.__dict__)

headers = {
    'authority': 'www.yeezysupply.com',
    'cache-control': 'max-age=0',
    'upgrade-insecure-requests': '1',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.106 Safari/537.36',
    'sec-fetch-dest': 'document',
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'sec-fetch-site': 'same-origin',
    'sec-fetch-mode': 'navigate',
    'sec-fetch-user': '?1',
    'accept-language': 'en-US,en;q=0.9',
}

session = requests.session()

response = session.get('https://kith.com/collections/mens-footwear', headers=headers)

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

for element in soup.find_all('li', class_='collection-product'):
    name = element.find('h1', class_="product-card__title").text.strip()
    price = element.find('span', class_="product-card__price").text.strip()
    link = "https://kith.com/" + element.find('a').get('href')

    prodcut = Prodcut(name, price, link)

    print(prodcut.__repr__())


Wir haben die grundlegenden Technologien und Prinzipien untersucht, denen wir in den folgenden Abschnitten begegnen werden. Ich empfehle, dass Sie versuchen, die Aufgaben mit diesen Bibliotheken selbst zu erledigen, und ich freue mich auch über Ihre Präferenzen bezüglich der Site, die als Beispiel ausgewählt wird. Als nächstes werden wir uns ansehen, wie man nach Backend-API-Punkten sucht und mit ihnen interagiert.


All Articles