Python के साथ Craigslist स्क्रैपिंग: एक पूरी गाइड

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

Craigslist जैसी एक विज्ञापन प्लेटफॉर्म डिजिटल युग में भी प्रासंगिक बनी हुई है। कलेक्टर विज्ञापनों से जानकारी निकालने को स्वचालित करने में मदद करता है, विशेष रूप से सीधे वेबसाइटों से डेटा प्राप्त करके। BeautifulSoup और Requests जैसी लचीली और शक्तिशाली लाइब्रेरीज़ के कारण, डेटा संग्रह कुशलतापूर्वक किया जा सकता है। यह ट्यूटोरियल Python के साथ Craigslist स्क्रैपिंग पर केंद्रित है, जिसमें BeautifulSoup, Requests और बॉट डिटेक्शन से बचने के लिए प्रॉक्सी रोटेशन को हाइलाइट किया गया है।

अब, हम यह समझेंगे कि Craigslist को चरण-दर-चरण कैसे स्क्रैप किया जाए।

Python के साथ Craigslist डेटा स्क्रैप करने के बुनियादी कदम

अब, हम Craigslist को वेब स्क्रैप करने के चरणों को अधिक विस्तार से देखेंगे, HTTP अनुरोध भेजने से शुरू करते हुए, आवश्यक पेज को सेक्शन में बांटना, वांछित डेटा इकट्ठा करना और इसे एक पूर्वनिर्धारित प्रारूप में सहेजना।

अपना पर्यावरण सेटअप करना

निम्नलिखित पैकेजों को डाउनलोड और इंस्टॉल करना होगा:


pip install beautifulsoup4
pip install requests

Craigslist पेज पर HTTP अनुरोध भेजना

वेब पेज से डेटा प्राप्त करने के लिए, सबसे पहले आपको उन URL पर HTTP अनुरोध भेजने होंगे जिन्हें आप स्क्रैप करना चाहते हैं। requests लाइब्रेरी का उपयोग करके, आप GET अनुरोध भेज सकते हैं ताकि HTML सामग्री प्राप्त की जा सके, जिसे आप बाद में प्रोसेस करके आवश्यक जानकारी निकाल सकते हैं।


import requests

# क्रेग्सलिस्ट URL की सूची को खुरचने के लिए
urls = [
    "link",
    "link"
]

for url in urls:
    # URL को एक अनुरोध प्राप्त करें
    response = requests.get(url)
    
    # जाँच करें कि क्या अनुरोध सफल था (स्थिति कोड 200)
    if response.status_code == 200:
        # प्रतिक्रिया से HTML सामग्री निकालें
        html_content = response.text
        
    else:
        # यदि अनुरोध विफल हो गया, तो स्थिति कोड के साथ एक त्रुटि संदेश प्रिंट करें
        print(f"Failed to retrieve {url}. Status code: {response.status_code}")

BeautifulSoup का उपयोग करके HTML सामग्री पार्स करना

BeautifulSoup के साथ, आप HTML के माध्यम से जा सकते हैं और Craigslist से आपको जिन हिस्सों की जरूरत है उन्हें चुन सकते हैं। यह आपको टैग खोजने, टेक्स्ट प्राप्त करने और लिंक या कीमतों जैसी चीज़ें निकालने देता है। यह अव्यवस्थित वेब पेजों से उपयोगी जानकारी निकालने का एक आसान तरीका है।


from bs4 import BeautifulSoup

# सूची में प्रत्येक URL के माध्यम से पुनरावृत्ति करें
for url in urls:
    # URL को एक अनुरोध प्राप्त करें
    response = requests.get(url)
    
    #जाँच करें कि क्या अनुरोध सफल था (स्थिति कोड 200)
    if response.status_code == 200:
        # प्रतिक्रिया से HTML सामग्री निकालें
        html_content = response.text
        
        #BeautifulSoup का उपयोग करके HTML सामग्री को पार्स करें
        soup = BeautifulSoup(html_content, 'html.parser')
        
    else:
        #यदि अनुरोध विफल हो गया, तो स्थिति कोड के साथ एक त्रुटि संदेश प्रिंट करें
        print(f"Failed to retrieve {url}. Status code: {response.status_code}")

BeautifulSoup लाइब्रेरी के साथ डेटा निकालना

HTML सामग्री प्राप्त करने के बाद, अगला कदम इसे BeautifulSoup लाइब्रेरी का उपयोग करके पार्स करना है। हम फ़ंक्शन्स का उपयोग करके Craigslist डेटा स्क्रैप करते हैं, जैसे कि लिस्टिंग में आइटम टाइटल और कीमतें। यह ऐसा है जैसे आपके पास एक उपकरण हो, जो आपको अव्यवस्थित कोड में से उपयोगी जानकारी जल्दी और कुशलतापूर्वक ढूंढने में मदद करता है।


from bs4 import BeautifulSoup

# सूची में प्रत्येक URL के माध्यम से पुनरावृत्ति करें
for url in urls:
    # Send a GET request to the URL
    response = requests.get(url)
    
    # जाँच करें कि क्या अनुरोध सफल था (स्थिति कोड 200)
    if response.status_code == 200:
        # प्रतिक्रिया से HTML सामग्री निकालें
        html_content = response.text
        
        # BeautifulSoup का उपयोग करके HTML सामग्री को पार्स करें
        soup = BeautifulSoup(html_content, 'html.parser')
        
        # विशिष्ट डेटा बिंदु निकालना
        # लिस्टिंग का शीर्षक खोजें
        title = soup.find('span', id='titletextonly').text.strip()
        
        # लिस्टिंग की कीमत खोजें
        price = soup.find('span', class_='price').text.strip()
        
        # लिस्टिंग का विवरण खोजें (कई पैराग्राफ हो सकते हैं)
        description = soup.find('section', id='postingbody').find_all(text=True, recursive=False)
        
        # निकाले गए डेटा (प्रदर्शन के उद्देश्यों के लिए)
        print(f"Title: {title}")
        print(f"Price: {price}")
        print(f"Description: {description}")
        
    else:
        # यदि अनुरोध विफल हो जाता है, तो स्थिति कोड के साथ एक त्रुटि संदेश प्रिंट करें
        print(f"Failed to retrieve {url}. Status code: {response.status_code}")

शीर्षक:

1.png

कीमत:

2.png

विवरण:

3.png

स्क्रैप किए गए डेटा को CSV फ़ाइल में सहेजना

Craigslist डेटा निकालने के बाद, सुनिश्चित करें कि इसे भविष्य में उपयोग या विश्लेषण और अन्य अनुप्रयोगों के साथ संगतता के लिए CSV प्रारूप में संग्रहीत किया जाए।


import csv

# CSV फ़ाइल पथ और फ़ील्ड नामों को परिभाषित करें
csv_file = 'craigslist_data.csv'
fieldnames = ['Title', 'Price', 'Description']

# CSV फ़ाइल में डेटा लिखना
try:
    # UTF-8 एन्कोडिंग के साथ राइट मोड में CSV फ़ाइल खोलें
    with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
        # निर्दिष्ट फ़ील्डनाम के साथ एक CSV DictWriter ऑब्जेक्ट बनाएं
        writer = csv.DictWriter(file, fieldnames=fieldnames)
        
        # CSV फ़ाइल में हेडर पंक्ति लिखें
        writer.writeheader()
        
        # Scraped_data सूची में प्रत्येक आइटम के माध्यम से पुनरावृत्त करें
        for item in scraped_data:
            # प्रत्येक आइटम को CSV फ़ाइल में एक पंक्ति के रूप में लिखें
            writer.writerow(item)
        
    # CSV फ़ाइल में डेटा लिखने के बाद एक सफलता संदेश प्रिंट करें
    print(f"Data saved to {csv_file}")

except IOError:
    # एक त्रुटि संदेश प्रिंट करें यदि CSV फ़ाइल को लिखते समय IoError होता है
    print(f"Error occurred while writing data to {csv_file}")

संभावित बाधाओं को संभालना

Craigslist API Python का उपयोग कैसे करें

अगर आप Craigslist वेबसाइट से लिस्टिंग को स्वचालित रूप से एकत्र करना चाहते हैं, तो सबसे आसान तरीकों में से एक है एक लाइब्रेरी के माध्यम से अनौपचारिक API का उपयोग करना। यह आपको साइट को क्वेरी करने, श्रेणी, शहर, कीमत, कीवर्ड और अधिक द्वारा परिणामों को फ़िल्टर करने की अनुमति देता है।

लाइब्रेरी को इंस्टॉल करके शुरू करें:


pip install python-craigslist


यहाँ न्यूयॉर्क में अपार्टमेंट किराए पर खोजने का एक सरल उदाहरण दिया गया है:


from craigslist import CraigslistHousing

cl_h = CraigslistHousing(site='newyork', category='apa', filters={'max_price': 2000})
for result in cl_h.get_results(limit=10):
    print(result['name'], result['price'], result['url'])

यह कोड न्यूयॉर्क सिटी में अपार्टमेंट/हाउसिंग फॉर रेंट सेक्शन से पहली 10 लिस्टिंग्स प्राप्त करता है, जहाँ कीमत $2000 से कम होती है।

लाइब्रेरी नौकरियों, कारों, बिक्री के लिए वस्तुओं और अधिक जैसी श्रेणियों का भी समर्थन करती है — और साथ ही कई प्रकार के फ़िल्टर भी। यह बॉट्स, लिस्टिंग ट्रैकर्स या मार्केट एनालिटिक्स जैसे Python-आधारित टूल जल्दी बनाने के लिए एक शानदार उपकरण है।

संभावित बाधाओं को संभालना

वेब स्क्रैपिंग करते समय, विशेष रूप से Craigslist के साथ, कुछ अतिरिक्त चुनौतियों का सामना करना पड़ सकता है। यह स्क्रैपिंग प्रयासों को रोकने के लिए IP ब्लॉक और CAPTCHA चुनौतियों को लागू करता है। इन समस्याओं से बचने के लिए, आप प्रॉक्सी और यूज़र एजेंट रोटेशन को एक साथ लागू कर सकते हैं।

प्रॉक्सी का उपयोग करना:

प्रॉक्सी और रोटेटिंग यूज़र-एजेंट्स का एक साथ उपयोग करना स्क्रैपिंग जारी रखने का एक स्मार्ट तरीका है बिना पकड़े गए।


proxies = {
    'http': 'http://your_proxy_ip:your_proxy_port',
    'https': 'https://your_proxy_ip:your_proxy_port'
}

response = requests.get(url, proxies=proxies)

यूज़र-एजेंट रोटेशन का मतलब है कि आपके स्क्रैपर द्वारा प्रत्येक अनुरोध के साथ भेजी जाने वाली ब्राउज़र पहचान को बदलना। अगर आप हमेशा एक ही यूज़र-एजेंट का उपयोग करते हैं, तो यह संदिग्ध लगता है। विभिन्न यूज़र-एजेंट्स के बीच स्विच करने से आपका स्क्रैपर सामान्य उपयोगकर्ताओं की तरह दिखाई देता है, जिससे ब्लॉक्स से बचने में मदद मिलती है:


import random

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 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
    # आवश्यकतानुसार अधिक उपयोगकर्ता एजेंट जोड़ें
]

headers = {
    'User-Agent': random.choice(user_agents)
}

response = requests.get(url, headers=headers)

पूर्ण कोड

इस ट्यूटोरियल में बताए गए सभी मॉड्यूल्स को एक साथ जोड़ने से एक पूरी तरह से कार्यात्मक Python Craigslist स्क्रैपर विकसित किया जा सकता है। यह प्रोग्राम कई URLs से डेटा निकाल सकता है, उसे पार्स कर सकता है और आवश्यक डेटा प्राप्त करने के लिए नेविगेट कर सकता है।


import requests
import urllib3
from bs4 import BeautifulSoup
import csv
import random
import ssl

ssl._create_default_https_context = ssl._create_stdlib_context
urllib3.disable_warnings()


# क्रेग्सलिस्ट URL की सूची को खुरचने के लिए
urls = [
    "link",
    "link"
]

# उपयोगकर्ता एजेंट और परदे के पीछे
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 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
]

proxies = [
    {'http': 'http://your_proxy_ip1:your_proxy_port1', 'https': 'https://your_proxy_ip1:your_proxy_port1'},
    {'http': 'http://your_proxy_ip2:your_proxy_port2', 'https': 'https://your_proxy_ip2:your_proxy_port2'},
]

# स्क्रैप किए गए डेटा को स्टोर करने के लिए सूची
scraped_data = []

# सूची में प्रत्येक URL के माध्यम से लूप
for url in urls:
    # पता लगाने से बचने के लिए प्रत्येक अनुरोध के लिए उपयोगकर्ता एजेंट को घुमाएं
    headers = {
        'User-Agent': random.choice(user_agents)
    }

    # आईपी ​​ब्लॉकिंग से बचने के लिए प्रत्येक अनुरोध के लिए एक अलग प्रॉक्सी का उपयोग करें
    proxy = random.choice(proxies)

    try:
        # हेडर और प्रॉक्सी के साथ क्रेग्सलिस्ट URL को अनुरोध भेजें
        response = requests.get(url, headers=headers, proxies=proxy, timeout=30, verify=False)
        
        # जाँच करें कि क्या अनुरोध सफल था (स्थिति कोड 200)
        if response.status_code == 200:
            # प्रतिक्रिया के HTML सामग्री को पार्स करें
            html_content = response.text
            soup = BeautifulSoup(html_content, 'html.parser')

            # पार्सड HTML से डेटा निकालें
            title = soup.find('span', id='titletextonly').text.strip()
            price = soup.find('span', class_='price').text.strip()
            description = soup.find('section', id='postingbody').get_text(strip=True, separator='\n')  # निकालने का विवरण
            # सूची में एक शब्दकोश के रूप में डेटा स्क्रैप्ड डेटा
            scraped_data.append({'Title': title, 'Price': price, 'Description': description})
            print(f"Data scraped for {url}")
        else:
            # यदि अनुरोध विफल हो जाता है तो त्रुटि संदेश प्रिंट करें
            print(f"Failed to retrieve {url}. Status code: {response.status_code}")
    except Exception as e:
        # यदि कोई त्रुटि स्क्रैपिंग के दौरान होती है, तो अपवाद संदेश प्रिंट करें
        print(f"Exception occurred while scraping {url}: {str(e)}")

# स्क्रैप किए गए डेटा को संग्रहीत करने के लिए CSV फ़ाइल सेटअप
csv_file = 'craigslist_data.csv'
fieldnames = ['Title', 'Price', 'Description']

# CSV फ़ाइल में स्क्रैपेड डेटा लिखना
try:
    with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
        writer = csv.DictWriter(file, fieldnames=fieldnames)

        # CSV फ़ाइल में हेडर पंक्ति लिखें
        writer.writeheader()

        # Scraped_data सूची के माध्यम से iterate और प्रत्येक आइटम को CSV फ़ाइल में लिखें
        for item in scraped_data:
            writer.writerow(item)

    # यदि डेटा सफलतापूर्वक सहेजा जाता है तो सफलता संदेश प्रिंट करें
    print(f"Data saved to {csv_file}")
except IOError:
    # CSV फ़ाइल में लिखते समय IOERROR है तो त्रुटि संदेश प्रिंट करें
    print(f"Error occurred while writing data to {csv_file}")

Python के साथ Craigslist स्क्रैपिंग: अंतिम विचार

अब जब आप समझ गए हैं कि वेब स्क्रैपिंग कैसे काम करती है, तो यह देखना आसान है कि यह कितनी उपयोगी है — चाहे आप बाजारों का विश्लेषण कर रहे हों या लीड्स की तलाश कर रहे हों। वेबसाइटों पर मूल्यवान जानकारी भरी होती है, और BeautifulSoup और Requests जैसी टूल्स उस डेटा को निकालना काफी आसान बना देती हैं। इस गाइड में कुछ महत्वपूर्ण सुझावों का भी उल्लेख किया गया, जैसे डायनामिक कंटेंट को संभालना और रोटेटिंग प्रॉक्सी का उपयोग करना ताकि नज़र से बचा जा सके। सही तरीके से किया जाए तो Python के साथ स्क्रैपिंग वास्तव में व्यवसायों और लोगों को हर तरह के क्षेत्रों में बेहतर निर्णय लेने में मदद कर सकती है।

टिप्पणियाँ:

0 टिप्पणियाँ