Raspado web Parte 1

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.


All Articles