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.