वेब स्क्रैपिंग विभिन्न उद्देश्यों के लिए वेबसाइटों से डेटा निकालने का एक शक्तिशाली तरीका है, जैसे कि व्यवसाय में विश्लेषण, अनुसंधान और बुद्धिमत्ता। यह ट्यूटोरियल आपको प्रमुख रणनीतियों और तकनीकों पर ध्यान केंद्रित करने के साथ पायथन में वॉलमार्ट उत्पाद की जानकारी को खत्म करने में मदद करता है। वॉलमार्ट स्क्रैपिंग एक उदाहरण प्रस्तुत करता है जहां हम वॉलमार्ट साइटों के तहत विभिन्न पृष्ठों पर पाए गए नाम, मूल्य या समीक्षा जैसे उत्पादों का विवरण दे सकते हैं।
यह गाइड HTTP अनुरोधों और LXML लाइब्रेरी को HTML सामग्री को पार्स करने के लिए अनुरोध लाइब्रेरी का उपयोग करेगा।
शुरू करने से पहले, सुनिश्चित करें कि आप अपनी मशीन पर पायथन स्थापित हैं। आप PIP का उपयोग करके आवश्यक पुस्तकालयों को स्थापित कर सकते हैं:
pip install requests
pip install lxml
pip install urllib3
अगला, आइए आवश्यक पुस्तकालयों को आयात करें:
import requests
from lxml import html
import csv
import random
import urllib3
import ssl
वॉलमार्ट उत्पाद की सूची को खुरचने के लिए URL।
product_urls = [
'link with https',
'link with https',
'link with https'
]
किसी वेबसाइट को परिमार्जन करने के लिए, यह बहुत महत्वपूर्ण है कि कोई सही हेडर का उपयोग करता है, विशेष रूप से उपयोगकर्ता-एजेंट हेडर, ताकि एक वास्तविक ब्राउज़र से अनुरोध की नकल करने के लिए। क्या अधिक है, कोई भी रोटेटेबल प्रॉक्सी सर्वर का उपयोग करके साइट के मालिकों द्वारा लगाए गए एंटी-बॉट उपायों के कारण प्रतिबंधित होने से बच सकता है। नीचे उपयोगकर्ता-एजेंट स्ट्रिंग्स के उदाहरण दिए गए हैं, जिसमें प्रॉक्सी सर्वर को कैसे एकीकृत किया जाए, जिसमें आईपी पते के आधार पर प्राधिकरण की आवश्यकता होती है।
user_agents = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
]
proxy = [
'<ip>:<port>',
'<ip>:<port>',
'<ip>:<port>',
]
ब्राउज़र अनुरोधों की नकल करने के लिए हेडर सेट करें और पता लगाने से बचें।
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'accept-language': 'en-IN,en;q=0.9',
'dnt': '1',
'priority': 'u=0, i',
'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Linux"',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
}
उत्पाद विवरण संग्रहीत करने के लिए एक खाली सूची बनाएं।
product_details = []
URL पृष्ठों के लिए गणना प्रक्रिया निम्नानुसार संचालित होती है: प्रत्येक URL पृष्ठ के लिए, एक GET अनुरोध एक यादृच्छिक रूप से चयनित उपयोगकर्ता-एजेंट और प्रॉक्सी का उपयोग करके भेजा जाता है। HTML प्रतिक्रिया प्राप्त करने पर, उत्पाद का नाम, मूल्य और समीक्षा जैसे विवरण निकालने के लिए इसे पार्स किया जाता है। निकाले गए डेटा को एक शब्दकोश के रूप में संग्रहीत किया जाता है, जिसे बाद में एक सूची में जोड़ा जाता है जो पहले बनाई गई थी।
for url in product_urls:
headers['user-agent'] = random.choice(user_agents)
proxies = {
'http': f'http://{random.choice(proxy)}',
'https': f'http://{random.choice(proxy)}',
}
try:
# URL को HTTP प्राप्त करें अनुरोध भेजें
response = requests.get(url=url, headers=headers, proxies=proxies, verify=False)
print(response.status_code)
response.raise_for_status()
except requests.exceptions.RequestException as e:
print(f'Error fetching data: {e}')
# LXML का उपयोग करके HTML सामग्री को पार्स करें
parser = html.fromstring(response.text)
# उत्पाद शीर्षक निकालें
title = ''.join(parser.xpath('//h1[@id="main-title"]/text()'))
# उत्पाद की कीमत निकालें
price = ''.join(parser.xpath('//span[@itemprop="price"]/text()'))
# समीक्षा विवरण निकालें
review_details = ''.join(parser.xpath('//div[@data-testid="reviews-and-ratings"]/div/span[@class="w_iUH7"]/text()'))
# एक शब्दकोश में स्टोर निकाले गए विवरण
product_detail = {
'title': title,
'price': price,
'review_details': review_details
}
# सूची में उत्पाद विवरण जोड़ें
product_details.append(product_detail)
शीर्षक:
कीमत:
समीक्षा विवरण:
with open('walmart_products.csv', 'w', newline='') as csvfile:
fieldnames = ['title', 'price', 'review_details']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for product_detail in product_details:
writer.writerow(product_detail)
यहाँ टिप्पणियों के साथ पूरा कोड है जो आपको बेहतर ढंग से समझने में मदद करता है:
import requests
from lxml import html
import csv
import random
import urllib3
import ssl
ssl._create_default_https_context = ssl._create_stdlib_context
urllib3.disable_warnings()
# उत्पाद URL की सूची परिमार्जन करने के लिए
product_urls = [
'link with https',
'link with https',
'link with https'
]
# गुमनामी के लिए यादृच्छिक उपयोगकर्ता-एजेंट तार
user_agents = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
]
# आईपी रोटेशन के लिए प्रॉक्सी सूची
proxy = [
'<ip>:<port>',
'<ip>:<port>',
'<ip>:<port>',
]
# ब्राउज़र अनुरोधों की नकल करने के लिए हेडर
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'accept-language': 'en-IN,en;q=0.9',
'dnt': '1',
'priority': 'u=0, i',
'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Linux"',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
}
# उत्पाद विवरण संग्रहीत करने के लिए एक खाली सूची को प्रारंभ करें
product_details = []
# प्रत्येक उत्पाद URL के माध्यम से लूप
for url in product_urls:
headers['user-agent'] = random.choice(user_agents)
proxies = {
'http': f'http://{random.choice(proxy)}',
'https': f'http://{random.choice(proxy)}',
}
try:
# URL को HTTP प्राप्त करें अनुरोध भेजें
response = requests.get(url=url, headers=headers, proxies=proxies, verify=False)
print(response.status_code)
response.raise_for_status()
except requests.exceptions.RequestException as e:
print(f'Error fetching data: {e}')
# LXML का उपयोग करके HTML सामग्री को पार्स करें
parser = html.fromstring(response.text)
# उत्पाद शीर्षक निकालें
title = ''.join(parser.xpath('//h1[@id="main-title"]/text()'))
# उत्पाद की कीमत निकालें
price = ''.join(parser.xpath('//span[@itemprop="price"]/text()'))
# समीक्षा विवरण निकालें
review_details = ''.join(parser.xpath('//div[@data-testid="reviews-and-ratings"]/div/span[@class="w_iUH7"]/text()'))
# एक शब्दकोश में स्टोर निकाले गए विवरण
product_detail = {
'title': title,
'price': price,
'review_details': review_details
}
# सूची में उत्पाद विवरण जोड़ें
product_details.append(product_detail)
# एक CSV फ़ाइल में निकाले गए डेटा को लिखें
with open('walmart_products.csv', 'w', newline='') as csvfile:
fieldnames = ['title', 'price', 'review_details']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for product_detail in product_details:
writer.writerow(product_detail)
हमारा ट्यूटोरियल दर्शाता है कि वॉलमार्ट से उत्पाद डेटा को परिमार्जन करने के लिए पायथन लाइब्रेरी का उपयोग कैसे करें और बाद के विश्लेषण के लिए इसे सीएसवी प्रारूप में सहेजें। प्रदान की गई स्क्रिप्ट मौलिक है और एक नींव प्रदान करती है जिसे स्क्रैपिंग प्रक्रिया की दक्षता बढ़ाने के लिए बढ़ाया जा सकता है। संवर्द्धन में मानव ब्राउज़िंग पैटर्न की नकल करने के अनुरोधों के बीच यादृच्छिक देरी शामिल हो सकती है, पता लगाने से बचने के लिए उपयोगकर्ता-एजेंट और प्रॉक्सी रोटेशन को लागू करना, और संभावित स्क्रैपिंग रुकावट या विफलताओं को प्रबंधित करने के लिए एक मजबूत त्रुटि हैंडलिंग सिस्टम विकसित करना।
टिप्पणियाँ: 0