परिचय
सभी को नमस्कार। हाल ही में, मुझे इस बारे में रुचि रखने वाले लोगों के साथ साझा करने का विचार आया कि स्क्रैपर्स कैसे लिखे जाते हैं। चूंकि अधिकांश दर्शक पायथन से परिचित हैं, इस पर आगे के सभी उदाहरण लिखे जाएंगे।
यह हिस्सा उन लोगों को पेश करने के लिए बनाया गया है जिन्होंने इस क्षेत्र में खुद को आजमाया नहीं है। यदि आप पहले से ही एक उन्नत पाठक हैं, तो आप सुरक्षित रूप से आगे स्क्रॉल कर सकते हैं, लेकिन पैटर्न को संरक्षित करने के लिए, मैं आपको इस लेख पर थोड़ा ध्यान देने की सलाह दूंगा।
print('Part 1. Get started')
उपकरण
- प्रोग्रामिंग लैंग्वेज और इसके अनुरूप लाइब्रेरी
, इसके बिना, कहीं नहीं। हमारे मामले में, पायथन का उपयोग किया जाएगा। यह भाषा स्क्रैपर्स लिखने के लिए एक बहुत शक्तिशाली उपकरण है, यदि आप इसे और इसके पुस्तकालयों का सही उपयोग कर सकते हैं: अनुरोध, bs4, json, lxml, re। - डेवलपर टूल
हर आधुनिक ब्राउज़र में यह उपयोगिता होती है। व्यक्तिगत रूप से, मैं Google Chrome या फ़ायरफ़ॉक्स का उपयोग करने में सहज हूं। यदि आप अन्य ब्राउज़रों का उपयोग करते हैं, तो मैं उपरोक्त में से किसी एक को आज़माने की सलाह देता हूं। यहां हमें लगभग सभी टूल की आवश्यकता होगी: तत्व, कंसोल, नेटवर्क, एप्लिकेशन, डीबगर। - आधुनिक आईडीई
यहां विकल्प आपका है, केवल एक चीज जिसे मैं सलाह देना चाहूंगा वह है आपके विकास के माहौल में एक कंपाइलर, डिबगर और एक स्थिर विश्लेषक की उपस्थिति। मैं JetBrains से PyCharm को अपनी प्राथमिकता देता हूं।
खुद के लिए, मैं डेटा निष्कर्षण और विश्लेषण के दो सिद्धांतों को अलग करता हूं: फ्रंटएंड, बैकएंड।
एक मोर्चा । इस मामले में, हम सीधे वेब एप्लिकेशन सर्वर पर एकत्रित अंतिम 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__())
हमने बुनियादी तकनीकों और सिद्धांतों की जांच की, जो हम निम्नलिखित भागों में मिलेंगे। मेरा सुझाव है कि आप इन पुस्तकालयों के साथ कार्यों को अपने दम पर पूरा करने का प्रयास करें, और मुझे साइट के बारे में आपकी प्राथमिकताएं सुनने में भी खुशी होगी, जिसे एक उदाहरण के रूप में चुना जाएगा। इसके बाद, हम देखेंगे कि बैकएंड एपीआई बिंदुओं की खोज कैसे करें और उनके साथ कैसे बातचीत करें।