Introducción
Hola a todos. Recientemente, tuve una idea para compartir con un círculo de personas interesadas sobre cómo se escriben los raspadores. Como la mayoría de las audiencias están familiarizadas con Python, todos los ejemplos adicionales se escribirán en él.
Esta parte está diseñada para presentar a aquellos que no se han probado en esta área. Si ya es un lector avanzado, puede desplazarse con mayor seguridad, pero para preservar el patrón, le aconsejaría que preste un poco de atención a este artículo.
print('Part 1. Get started')
Herramientas
- Lenguaje de programación y bibliotecas correspondientes
Por supuesto, sin él, en ninguna parte. En nuestro caso, se utilizará Python. Este lenguaje es una herramienta bastante poderosa para escribir raspadores, si puede usarlo y sus bibliotecas correctamente: solicitudes, bs4, json, lxml, re. - Herramientas para desarrolladores
Todos los navegadores modernos tienen esta utilidad. Personalmente, me siento cómodo usando Google Chrome o Firefox. Si usa otros navegadores, le recomiendo que pruebe uno de los anteriores. Aquí necesitaremos casi todas las herramientas: elementos, consola, red, aplicación, depurador. - 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__())
Examinamos las tecnologías y principios básicos que encontraremos en las siguientes partes. Le recomiendo que intente completar las tareas con estas bibliotecas por su cuenta, y también me complacerá escuchar sus preferencias sobre el sitio, que se elegirán como ejemplo. A continuación, veremos cómo buscar puntos de API de backend e interactuar con ellos.