पायथन के साथ वॉलमार्ट डेटा को स्क्रैप करने के लिए गाइड

टिप्पणियाँ: 0

वेब स्क्रैपिंग विभिन्न उद्देश्यों के लिए वेबसाइटों से डेटा निकालने का एक शक्तिशाली तरीका है, जैसे कि व्यवसाय में विश्लेषण, अनुसंधान और बुद्धिमत्ता। यह ट्यूटोरियल आपको प्रमुख रणनीतियों और तकनीकों पर ध्यान केंद्रित करने के साथ पायथन में वॉलमार्ट उत्पाद की जानकारी को खत्म करने में मदद करता है। वॉलमार्ट स्क्रैपिंग एक उदाहरण प्रस्तुत करता है जहां हम वॉलमार्ट साइटों के तहत विभिन्न पृष्ठों पर पाए गए नाम, मूल्य या समीक्षा जैसे उत्पादों का विवरण दे सकते हैं।

यह गाइड HTTP अनुरोधों और LXML लाइब्रेरी को HTML सामग्री को पार्स करने के लिए अनुरोध लाइब्रेरी का उपयोग करेगा।

पर्यावरण की स्थापना

शुरू करने से पहले, सुनिश्चित करें कि आप अपनी मशीन पर पायथन स्थापित हैं। आप PIP का उपयोग करके आवश्यक पुस्तकालयों को स्थापित कर सकते हैं:

pip install requests
pip install  lxml
pip install urllib3

अगला, आइए आवश्यक पुस्तकालयों को आयात करें:

  • अनुरोध: वेब पेजों को पुनः प्राप्त करने के लिए HTTP अनुरोध करने के लिए;
  • LXML: HTML सामग्री को पार्स करने के लिए;
  • CSV: CSV फ़ाइल में निकाले गए डेटा को लिखने के लिए;
  • यादृच्छिक: यादृच्छिक प्रॉक्सी और उपयोगकर्ता-एजेंट स्ट्रिंग्स का चयन करने के लिए।
import requests
from lxml import html
import csv
import random
import urllib3
import ssl

उत्पाद URL को परिभाषित करें

वॉलमार्ट उत्पाद की सूची को खुरचने के लिए 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)

शीर्षक:

1.png

कीमत:

2.png

समीक्षा विवरण:

3.png

CSV के लिए डेटा सहेजें

  1. लेखन के लिए एक नई CSV फ़ाइल खोलें।
  2. CSV फ़ाइल के लिए फ़ील्ड नाम (कॉलम) को परिभाषित करें।
  3. CSV फ़ाइल में शब्दकोश लिखने के लिए CSV.DICTWRITER ऑब्जेक्ट बनाएं।
  4. CSV फ़ाइल में हेडर पंक्ति लिखें।
  5. Product_details सूची के माध्यम से लूप करें और प्रत्येक उत्पाद शब्दकोश को 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)

पूरा कोड:

यहाँ टिप्पणियों के साथ पूरा कोड है जो आपको बेहतर ढंग से समझने में मदद करता है:

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 टिप्पणियाँ