कैसे पायथन का उपयोग करके ईबे डेटा को परिमार्जन करें

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

ईबे एक प्रसिद्ध ऑनलाइन प्लेटफ़ॉर्म है जो अपने पंजीकृत उपयोगकर्ताओं के बीच उत्पादों की एक विस्तृत श्रृंखला में व्यापारिक अवसर प्रदान करता है। इस गाइड में, हम बताएंगे कि पायथन का उपयोग करके ईबे लिस्टिंग से डेटा को कैसे परिमार्जन किया जाए। जैसे, हम उन विवरणों में रुचि लेंगे जो लिस्टिंग से उपलब्ध हैं और साथ ही साथ प्रत्येक उत्पादों में से प्रत्येक में अधिक बारी -बारी से विवरण के लिए उपलब्ध हैं।

आवश्यकताएँ

आरंभ करने के लिए, सुनिश्चित करें कि आपके पास निम्नलिखित पायथन लाइब्रेरी स्थापित हैं:

  • Requests: HTTP अनुरोध करने के लिए।
  • lxml: HTML सामग्री को पार्स करने के लिए।
  • Pandas: CSV फ़ाइल में डेटा सहेजने के लिए।

इन पुस्तकालयों का उपयोग करके स्थापित करें:


pip install requests lxml pandas

पेजिनेशन के लिए ईबे URL संरचना को समझना

ईबे पर उत्पादों की खोज करते समय, प्रत्येक पृष्ठ URL को पेजिनेटेड परिणामों के माध्यम से नेविगेट करने के लिए संशोधित किया जा सकता है। उदाहरण के लिए:

  • पृष्ठ 1: https://www.ebay.com/sch/i.html?_nkw=laptop
  • पेज 2: https://www.ebay.com/sch/i.html?_nkw=laptop&_pgn=2

_PGN पैरामीटर का उपयोग लिस्टिंग के कई पृष्ठों के माध्यम से नेविगेट करने के लिए किया जाता है, जो व्यापक डेटा की पुनर्प्राप्ति को सक्षम करता है। आइए स्क्रैपिंग प्रक्रिया शुरू करें।

चरण 1: eBay को अनुरोध भेजना

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


import requests
from lxml.html import fromstring

# एक वास्तविक ब्राउज़र का अनुकरण करने के लिए हेडर को परिभाषित करें
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',
    'cache-control': 'no-cache',
    'dnt': '1',
    'pragma': 'no-cache',
    'priority': 'u=0, i',
    'sec-ch-ua': '"Google Chrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129"',
    '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',
    'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36',
}

# खोज क्वेरी के लिए मापदंडों का अनुरोध करें
params = {
    '_nkw': 'laptop',
}

# EBay लिस्टिंग पृष्ठ पर एक अनुरोध भेजें
listing_page_response = requests.get('https link', params=params, headers=headers)
listing_parser = fromstring(listing_page_response.text)

चरण 2: लिस्टिंग पेज को पार्स करना

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


# उत्पाद लिंक निकालने के लिए लिस्टिंग पृष्ठ को पार्स करें
links = listing_parser.xpath('//div[@class="s-item__info clearfix"]/a[@_sp="p2351460.m1686.l7400"]/@href')

# आउटपुट मिले लिंक का एक नमूना
print("Product Links:", links[:5])  # Display the first five product links

चरण 3: स्क्रैपिंग उत्पाद डेटा

हाथ में उत्पाद URL के साथ, हम प्रत्येक उत्पाद पृष्ठ पर जाएंगे और निम्नलिखित विवरण निकालेंगे:

  • उत्पाद शीर्षक;
  • मूल्य;
  • शिपिंग लागत;
  • उत्पाद की स्थिति;
  • उपलब्ध मात्रा;
  • की मात्रा बेची गई;
  • भुगतान विकल्प;
  • वापसी नीति।

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


product_data = []

for url in links:
    # उत्पाद पृष्ठ पर एक अनुरोध भेजें
    product_page_response = requests.get(url, headers=headers)
    product_parser = fromstring(product_page_response.text)
    
    # XPath का उपयोग करके डेटा निकालें
    try:
        product_title = product_parser.xpath('//h1[@class="x-item-title__mainTitle"]/span/text()')[0]
        price = product_parser.xpath('//div[@data-testid="x-price-primary"]/span/text()')[0]
        shipping_cost = product_parser.xpath('//div[@class="ux-labels-values col-12 ux-labels-values--shipping"]//div[@class="ux-labels-values__values-content"]/div/span/text()')[0]
        product_condition = product_parser.xpath('//div[@class="x-item-condition-text"]/div/span/span[2]/text()')[0]
        available_quantity = product_parser.xpath('//div[@class="x-quantity__availability"]/span/text()')[0]
        sold_quantity = product_parser.xpath('//div[@class="x-quantity__availability"]/span/text()')[1]
        payment_options = ', '.join(product_parser.xpath('//div[@class="ux-labels-values col-12 ux-labels-values__column-last-row ux-labels-values--payments"]/div[2]/div/div//span/@aria-label'))
        return_policy = product_parser.xpath('//div[@class="ux-layout-section ux-layout-section--returns"]//div[@class="ux-labels-values__values-content"]/div/span/text()')[0]
        
        # एक शब्दकोश में डेटा स्टोर करें
        product_info = {
            'Title': product_title,
            'Price': price,
            'Shipping Cost': shipping_cost,
            'Condition': product_condition,
            'Available Quantity': available_quantity,
            'Sold Quantity': sold_quantity,
            'Payment Options': payment_options,
            'Return Policy': return_policy,
        }
        product_data.append(product_info)
    
    except IndexError as e:
        print(f"An error occurred: {e}")

चरण 4: एक सीएसवी फ़ाइल में डेटा सहेजना

डेटा एकत्र करने के बाद, हम इसे पंडों का उपयोग करके एक CSV फ़ाइल में सहेज सकते हैं।


import pandas as pd

# डेटा को डेटाफ्रेम में परिवर्तित करें
df = pd.DataFrame(product_data)

# CSV को सहेजें
df.to_csv('ebay_product_data.csv', index=False)
print("Data saved to ebay_product_data.csv")

EBay पर दर-सीमित और दरकिनार का पता लगाना

eBay अत्यधिक अनुरोधों को रोकने के लिए दर-सीमित करना नियुक्त करता है। यहां पता लगाने से बचने के लिए कुछ तरीके दिए गए हैं:

  • प्रॉक्सी का उपयोग करें: विभिन्न आईपी पते के बीच घुमाएं।
  • अनुरोध अंतराल को समायोजित करें: अनुरोधों के बीच देरी को लागू करें।
  • उपयोगकर्ता एजेंटों को यादृच्छिक करें: पता लगाने से बचने के लिए उपयोगकर्ता-एजेंट स्ट्रिंग को अलग-अलग करें।

इन सर्वोत्तम प्रथाओं का पालन करके, आप अवरुद्ध होने के जोखिम को कम कर सकते हैं और डेटा को कुशलता से स्क्रैप करना जारी रख सकते हैं।

पूरा कोड

यहाँ eBay डेटा को स्क्रैप करने और इसे CSV फ़ाइल में सहेजने का पूरा कोड है:


import requests
import random
from lxml.html import fromstring
import pandas as pd

useragents = ['Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36',
             'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36',
             'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36']

# अनुरोध के लिए हेडर को परिभाषित करें
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',
    'cache-control': 'no-cache',
    'dnt': '1',
    'pragma': 'no-cache',
    'priority': 'u=0, i',
    'sec-ch-ua': '"Google Chrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129"',
    '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',
    'user-agent': random.choice(useragents),
}

# खोज क्वेरी पैरामीटर
params = {'_nkw': 'laptop'}
proxies = {
    'http': 'IP:PORT',
    'https': 'IP:PORT'
}

# लिस्टिंग पेज प्राप्त करें
listing_page_response = requests.get('https://www.ebay.com/sch/i.html', params=params, headers=headers, proxies=proxies)
listing_parser = fromstring(listing_page_response.text)
links = listing_parser.xpath('//div[@class="s-item__info clearfix"]/a[@_sp="p2351460.m1686.l7400"]/@href')

# उत्पाद डेटा निकालें
product_data = []
for url in links:
    product_page_response = requests.get(url, headers=headers, proxies=proxies)
    product_parser = fromstring(product_page_response.text)
    try:
        product_info = {
            'Title': product_parser.xpath('//h1[@class="x-item-title__mainTitle"]/span/text()')[0],
            'Price': product_parser.xpath('//div[@data-testid="x-price-primary"]/span/text()')[0],
            'Shipping Cost': product_parser.xpath('//div[@class="ux-labels-values col-12 ux-labels-values--shipping"]//div[@class="ux-labels-values__values-content"]/div/span/text()')[0],
            'Condition': product_parser.xpath('//div[@class="x-item-condition-text"]/div/span/span[2]/text()')[0],
            'Available Quantity': product_parser.xpath('//div[@class="x-quantity__availability"]/span/text()')[0],
            'Sold Quantity': product_parser.xpath('//div[@class="x-quantity__availability"]/span/text()')[1],
            'Payment Options': ', '.join(product_parser.xpath('//div[@class="ux-labels-values col-12 ux-labels-values__column-last-row ux-labels-values--payments"]/div[2]/div/div//span/@aria-label')),
            'Return Policy': product_parser.xpath('//div[@class="ux-layout-section ux-layout-section--returns"]//div[@class="ux-labels-values__values-content"]/div/span/text()')[0]
        }
        product_data.append(product_info)
    except IndexError:
        continue

# CSV को सहेजें
df = pd.DataFrame(product_data)
df.to_csv('ebay_product_data.csv', index=False)
print("Data saved to ebay_product_data.csv")

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

टिप्पणियाँ:

0 टिप्पणियाँ