Mengikis Web Bagian 1

pengantar


Halo semuanya. Baru-baru ini, saya punya ide untuk berbagi dengan lingkaran orang yang tertarik bagaimana pencakar ditulis. Karena sebagian besar khalayak akrab dengan Python, semua contoh lebih lanjut akan ditulis di atasnya.


Bagian ini dirancang untuk memperkenalkan mereka yang belum mencoba sendiri di bidang ini. Jika Anda sudah menjadi pembaca tingkat lanjut, maka Anda dapat dengan aman menggulir lebih jauh, tetapi untuk mempertahankan polanya, saya akan menyarankan Anda untuk sedikit memperhatikan artikel ini.


print('Part 1. Get started')

Alat


  • Memprogram bahasa dan perpustakaan yang sesuai
    Tentu saja, tanpa itu, tidak ada tempat. Dalam kasus kami, Python akan digunakan. Bahasa ini adalah alat yang sangat kuat untuk menulis pencakar, jika Anda dapat menggunakannya dan perpustakaannya dengan benar: permintaan, bs4, json, lxml, re.
  • Alat Pengembang
    Setiap browser modern memiliki utilitas ini. Secara pribadi, saya nyaman menggunakan Google Chrome atau Firefox. Jika Anda menggunakan browser lain, saya sarankan mencoba salah satu di atas. Di sini kita akan memerlukan hampir semua alat: elemen, konsol, jaringan, aplikasi, 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__())


Kami memeriksa teknologi dan prinsip dasar yang akan kami temui di bagian berikut. Saya sarankan Anda mencoba untuk menyelesaikan tugas-tugas dengan perpustakaan ini sendiri, dan saya juga akan senang mendengar preferensi Anda tentang situs tersebut, yang akan dipilih sebagai contoh. Selanjutnya, kita akan melihat bagaimana mencari titik api backend dan berinteraksi dengannya.


All Articles