Raclage Web Partie 1

introduction


Bonjour à tous. Récemment, j'ai eu une idée à partager avec un cercle de personnes intéressées sur la façon dont les grattoirs sont écrits. Comme la plupart des publics connaissent Python, tous les autres exemples seront écrits dessus.


Cette partie est conçue pour présenter ceux qui ne se sont pas essayés dans ce domaine. Si vous êtes déjà un lecteur avancé, vous pouvez continuer à faire défiler en toute sécurité, mais pour conserver le modèle, je vous conseille de faire un peu attention à cet article.


print('Part 1. Get started')

Outils


  • Langage de programmation et bibliothèques correspondantes
    Bien sûr, sans lui, nulle part. Dans notre cas, Python sera utilisé. Ce langage est un outil assez puissant pour écrire des grattoirs, si vous pouvez l'utiliser correctement et ses bibliothèques: requêtes, bs4, json, lxml, re.
  • Outils de développement
    Chaque navigateur moderne a cet utilitaire. Personnellement, je suis à l'aise avec Google Chrome ou Firefox. Si vous utilisez d'autres navigateurs, je vous recommande d'essayer l'un des ci-dessus. Ici, nous aurons besoin de presque tous les outils: éléments, console, réseau, application, débogueur.
  • 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__())


Nous avons examiné les technologies et principes de base que nous rencontrerons dans les parties suivantes. Je vous recommande d'essayer de terminer les tâches avec ces bibliothèques par vous-même, et je serai également heureux d'entendre vos préférences concernant le site, qui sera choisi comme exemple. Ensuite, nous verrons comment rechercher des points api backend et interagir avec eux.


All Articles