تجريف على شبكة الإنترنت الجزء الأول

المقدمة


تحية للجميع. في الآونة الأخيرة ، كان لدي فكرة لمشاركتها مع دائرة مهتمة من الناس حول كيفية كتابة الكاشطات. نظرًا لأن معظم الجماهير على دراية بـ Python ، سيتم كتابة جميع الأمثلة الأخرى عليها.


تم تصميم هذا الجزء لتقديم أولئك الذين لم يجربوا أنفسهم في هذا المجال. إذا كنت بالفعل قارئًا متقدمًا ، فيمكنك التمرير بأمان أكثر ، ولكن للحفاظ على النمط ، أنصحك بإيلاء القليل من الاهتمام لهذه المقالة.


print('Part 1. Get started')

أدوات


  • لغة البرمجة والمكتبات المقابلة
    بالطبع لا مكان فيها. في حالتنا ، سيتم استخدام Python. هذه اللغة هي أداة قوية جدًا لكتابة الكاشطات ، إذا كنت تستطيع استخدامها ومكتباتها بشكل صحيح: الطلبات ، bs4 ، json ، lxml ، re.
  • أدوات المطور
    كل متصفح حديث لديه هذه الأداة. أنا شخصياً مرتاح لاستخدام Google Chrome أو Firefox. إذا كنت تستخدم متصفحات أخرى ، أوصيك بتجربة أحد ما سبق. سنحتاج هنا تقريبًا إلى جميع الأدوات: العناصر ، وحدة التحكم ، الشبكة ، التطبيق ، مصحح الأخطاء.
  • IDE الحديث
    هنا الخيار لك ، والشيء الوحيد الذي أود أن أنصح به هو وجود مترجم ، مصحح ، ومحلل ثابت في بيئة التطوير الخاصة بك. أعطي تفضيلتي ل PyCharm من JetBrains.

قليلا عن التنسيق


بالنسبة لي ، أميز بين مبدأين لاستخراج البيانات وتحليلها: الواجهة الأمامية ، الخلفية.


واجهة أمامية . في هذه الحالة ، نحصل مباشرة على معلومات من ملف 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__())


لقد درسنا التقنيات والمبادئ الأساسية التي سنلتقي بها في الأجزاء التالية. أوصي بمحاولة إكمال المهام مع هذه المكتبات بنفسك ، ويسعدني أيضًا سماع تفضيلاتك حول الموقع ، والذي سيتم اختياره كمثال. بعد ذلك ، سنلقي نظرة على كيفية البحث عن نقاط واجهة برمجة التطبيقات الخلفية والتفاعل معها.


All Articles