शुरुआती लोगों के लिए चरण-दर-चरण Python वेब स्क्रैपिंग गाइड

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

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

वेब स्क्रैपिंग के लिए अजगर पुस्तकालय

पायथन वेब स्क्रैपिंग को आसान बनाने के लिए कई पुस्तकालयों को प्रदान करता है। यहाँ सबसे अधिक इस्तेमाल किए जाने वाले कुछ हैं:

  • requests: पायथन के लिए एक सरल और सुरुचिपूर्ण HTTP लाइब्रेरी, जिसका उपयोग वेब पेजों को लाने के लिए HTTP अनुरोध भेजने के लिए किया जाता है।
  • Beautiful Soup: HTML और XML दस्तावेजों को पार्स करने के लिए बढ़िया। यह पृष्ठ स्रोत कोड से पार्स पेड़ बनाता है जो डेटा निकालना आसान बनाता है।
  • lxml: अपनी गति और दक्षता के लिए जाना जाता है, LXML XML और HTML दस्तावेजों को पार्स करने के लिए उत्कृष्ट है।
  • Playwright: डायनेमिक कंटेंट स्क्रैपिंग और वेब पेजों के साथ बातचीत के लिए एक मजबूत टूल।

HTTP अनुरोधों का परिचय

HTTP (हाइपरटेक्स्ट ट्रांसफर प्रोटोकॉल) वेब पर डेटा के हस्तांतरण के लिए एक एप्लिकेशन लेयर प्रोटोकॉल है। आप ब्राउज़र में एक URL टाइप करते हैं, और यह एक HTTP अनुरोध उत्पन्न करता है और इसे वेब सर्वर पर भेजता है। वेब सर्वर तब ब्राउज़र को HTTP प्रतिक्रिया वापस भेजता है जो वह आपको HTML पेज के रूप में प्रदान करता है। वेब स्क्रैपिंग के लिए, आपको इस प्रक्रिया की नकल करने और वेब पेजों की HTTP सामग्री को प्रोग्रामेटिक रूप से प्राप्त करने के लिए अपनी स्क्रिप्ट से HTTP अनुरोध उत्पन्न करने की आवश्यकता है।

अपना वातावरण स्थापित करना

सबसे पहले, सुनिश्चित करें कि आप अपने सिस्टम पर पायथन स्थापित हैं। आप इसे पायथन की आधिकारिक वेबसाइट से डाउनलोड कर सकते हैं।

एक आभासी वातावरण निर्भरता का प्रबंधन करने में मदद करता है। आभासी वातावरण बनाने और सक्रिय करने के लिए इन कमांड का उपयोग करें:


python -m venv scraping_env
source scraping_env/bin/activate

अगला, निम्न आदेशों का उपयोग करके आवश्यक पैकेज स्थापित करें:


pip install requests
pip install beautifulsoup4 
pip install lxml

सुंदर सूप के साथ वेब खुरचनी का निर्माण

आइए एक साधारण वेब स्क्रैपर के साथ शुरू करते हैं, जो कि स्थिर HTML सामग्री को परिमार्जन करने के अनुरोध का उपयोग करते हैं।

HTTP अनुरोध करना

HTTP अनुरोध का सबसे आम प्रकार GET अनुरोध है, जिसका उपयोग एक निर्दिष्ट URL से डेटा को पुनः प्राप्त करने के लिए किया जाता है। यहाँ एक मूल उदाहरण है कि http://example.com पर GET अनुरोध कैसे करें।


import requests
url = 'http://example.com'
response = requests.get(url)

HTTP प्रतिक्रियाओं को संभालना

अनुरोध पुस्तकालय प्रतिक्रिया को संभालने और संसाधित करने के लिए कई तरीके प्रदान करता है:

स्थिति कोड की जाँच करें: सुनिश्चित करें कि अनुरोध सफल रहा।


if response.status_code == 200:
    print('Request was successful!')
else:
    print('Request failed with status code:', response.status_code)

सामग्री निकालने: प्रतिक्रिया से पाठ या JSON सामग्री निकालें।


# पाठ के रूप में प्रतिक्रिया सामग्री प्राप्त करें
page_content = response.text
print(page_content)

# JSON के रूप में प्रतिक्रिया सामग्री प्राप्त करें (यदि प्रतिक्रिया JSON प्रारूप में है)
json_content = response.json()
print(json_content)

HTTP और नेटवर्क त्रुटियों को संभालना

HTTP और नेटवर्क त्रुटियां तब हो सकती हैं जब कोई संसाधन उपलब्ध नहीं होता है, एक अनुरोध समयबद्ध नहीं होता है, या सर्वर एक त्रुटि HTTP स्थिति (जैसे 404 नहीं मिला, 500 आंतरिक सर्वर त्रुटि) देता है। हम इन स्थितियों को संभालने के अनुरोधों द्वारा उठाए गए अपवाद वस्तुओं का उपयोग कर सकते हैं।


import requests

url = 'http://example.com'

try:
    response = requests.get(url, timeout=10)  # Set a timeout for the request
    response.raise_for_status()  # Raises an HTTPError for bad responses
except requests.exceptions.HTTPError as http_err:
    print(f'HTTP error occurred: {http_err}')
except requests.exceptions.ConnectionError:
    print('Failed to connect to the server.')
except requests.exceptions.Timeout:
    print('The request timed out.')
except requests.exceptions.RequestException as req_err:
    print(f'Request error: {req_err}')
else:
    print('Request was successful!')

HTML तत्वों से डेटा निकालना

वेब स्क्रैपिंग के लिए, हमें अक्सर HTML सामग्री से डेटा निकालने की आवश्यकता होती है। यह हिस्सा इस बात पर बात करेगा कि सुंदर सूप या LXML जैसे कुछ पुस्तकालयों के साथ HTML तत्वों से डेटा का पता लगाने और निकालने का तरीका कैसे निकाला जाएगा।

HTML (हाइपरटेक्स्ट मार्कअप लैंग्वेज) वेब पेज बनाने के लिए मानक मार्कअप भाषा है। इसमें टैग्स द्वारा दर्शाए गए नेस्टेड एलिमेंट्स होते हैं, जैसे कि <div>, <p>, <a>, आदि। प्रत्येक टैग में विशेषताएँ हो सकती हैं और उसमें टेक्स्ट, अन्य टैग्स या दोनों हो सकते हैं।

XPATH और CSS चयनकर्ता दस्तावेज़ में उनकी विशेषताओं या उनकी स्थिति के आधार पर HTML तत्वों का चयन करने के लिए एक बहुमुखी तरीका प्रदान करते हैं।

XPath और CSS चयनकर्ताओं को ढूंढना

जब वेब स्क्रैपिंग, वेब पेजों से विशिष्ट डेटा निकालने के लिए अक्सर HTML तत्वों को लक्षित करने के लिए सही XPATH या CSS चयनकर्ताओं की पहचान करने की आवश्यकता होती है। यहां बताया गया है कि आप इन चयनकर्ताओं को कुशलता से कैसे पा सकते हैं:

अधिकांश आधुनिक वेब ब्राउज़र अंतर्निहित डेवलपर टूल के साथ आते हैं जो आपको वेब पेजों की HTML संरचना का निरीक्षण करने की अनुमति देते हैं। यहां इन उपकरणों का उपयोग करने के लिए एक चरण-दर-चरण मार्गदर्शिका है:

  1. ओपन डेवलपर टूल:
    • क्रोम में: पृष्ठ पर राइट-क्लिक करें और "निरीक्षण करें" चुनें या Ctrl+Shift+I (Windows/Linux) या CMD+OPT+I (MAC) दबाएं।
    • फ़ायरफ़ॉक्स में: पेज पर राइट-क्लिक करें और "इंस्पेक्ट एलिमेंट" चुनें या CTRL+SHIFT+I (Windows/Linux) या CMD+OPT+I (MAC) दबाएं।
  2. तत्व का निरीक्षण करें:
    • निरीक्षण टूल (एक कर्सर आइकन) का उपयोग करें और उस तत्व पर क्लिक करें और उस तत्व पर क्लिक करें जिसे आप स्क्रैप करना चाहते हैं। यह HTML संरचना दृश्य में तत्व को उजागर करेगा।
  3. कॉपी XPath या CSS चयनकर्ता:
    • डेवलपर टूल्स फलक में हाइलाइट किए गए HTML तत्व पर राइट-क्लिक करें।
    • "कॉपी" चुनें और फिर या तो "कॉपी xPath" या "कॉपी चयनकर्ता" (CSS चयनकर्ता) चुनें।

1n.png

XPath: /html/body/div/h1

CSS Selector: body > div > h1

सुंदर सूप का उपयोग करके निष्कर्षण

सुंदर सूप HTML और XML दस्तावेजों को पार्स करने के लिए एक पायथन लाइब्रेरी है। यह HTML संरचना के माध्यम से नेविगेट करने और खोजने के लिए सरल तरीके और विशेषताएं प्रदान करता है।


from bs4 import BeautifulSoup
import requests

# वेबपेज का URL स्क्रैप करने के लिए
url = 'https://example.com'

# URL को HTTP प्राप्त करें अनुरोध भेजें
response = requests.get(url)

# सुंदर सूप का उपयोग करके प्रतिक्रिया की HTML सामग्री को पार्स करें
soup = BeautifulSoup(response.content, 'html.parser')

# CSS सेलेक्टर का उपयोग करके उन सभी <h1> टैग्स को खोजें जो <div> टैग्स के अंदर हैं और जो <body> टैग के सीधे बच्चे हैं।

h1_tags = soup.select('body > div > h1')

# पाए गए <h1> टैग की सूची में पुनरावृत्ति करें और उनकी पाठ सामग्री प्रिंट करें
for tag in h1_tags:
    print(tag.text)

पार्सिंग त्रुटियों को संभालना

पार्सिंग त्रुटियां तब होती हैं जब HTML या XML संरचना अपेक्षित नहीं होती है, जिससे डेटा निष्कर्षण में समस्याएं होती हैं। इन्हें Atteributeerror जैसे अपवादों को संभालकर प्रबंधित किया जा सकता है।


from bs4 import BeautifulSoup
import requests

# वेबपेज का URL स्क्रैप करने के लिए
url = 'https://example.com'

# URL को HTTP प्राप्त करें अनुरोध भेजें
response = requests.get(url)

try:
    # सुंदर सूप का उपयोग करके प्रतिक्रिया की HTML सामग्री को पार्स करें
    soup = BeautifulSoup(response.content, 'html.parser')

   # CSS सेलेक्टर का उपयोग करके उन सभी <h1> टैग्स को खोजें जो <div> टैग्स के अंदर हैं और जो <body> टैग के सीधे बच्चे हैं।
    h1_tags = soup.select('body > div > h1')

    # पाए गए <h1> टैग की सूची में पुनरावृत्ति करें और उनकी पाठ सामग्री प्रिंट करें
    for tag in h1_tags:
        print(tag.text)
except AttributeError as attr_err:
    # ऐसे मामलों को संभालें जहां एक विशेषताएं हो सकती हैं (जैसे, यदि प्रतिक्रिया।
    print(f'Attribute error occurred: {attr_err}')
except Exception as parse_err:
    # पार्सिंग के दौरान होने वाले किसी भी अन्य अपवाद को संभालें
    print(f'Error while parsing HTML: {parse_err}')

LXML का उपयोग करके निष्कर्षण

सुंदर सूप के अलावा, पायथन में HTML और XML दस्तावेजों को पार्स करने के लिए एक और लोकप्रिय पुस्तकालय LXML है। जबकि BeageSoup पार्सड डेटा को नेविगेट करने और हेरफेर करने के लिए एक सुविधाजनक इंटरफ़ेस प्रदान करने पर ध्यान केंद्रित करता है, LXML अपनी गति और लचीलेपन के लिए जाना जाता है, जिससे यह प्रदर्शन-महत्वपूर्ण कार्यों के लिए एक पसंदीदा विकल्प बन जाता है।


from lxml.html import fromstring
import requests

# वेबपेज का URL स्क्रैप करने के लिए
url = 'https://example.com'

# URL को HTTP प्राप्त करें अनुरोध भेजें
response = requests.get(url)

# LXML के FromString विधि का उपयोग करके प्रतिक्रिया की HTML सामग्री को पार्स करें
parser = fromstring(response.text)

# पहले <h1> टैग का टेक्स्ट कंटेंट खोजने के लिए XPath का उपयोग करें, जो कि एक <div> टैग के अंदर है और जो <body> टैग का सीधा बच्चा है।

title = parser.xpath('/html/body/div/h1/text()')[0]

# शीर्षक प्रिंट करें
print(title)

पार्सिंग त्रुटियों को संभालना

सुंदर सूप के समान, LXML आपको lxml.etree.xmlsyntaxerror जैसे अपवादों को पकड़कर इनायत त्रुटियों को संभालने की अनुमति देता है।


from lxml.html import fromstring
from lxml import etree
import requests

# वेबपेज का URL स्क्रैप करने के लिए
url = 'https://example.com'

# URL को HTTP प्राप्त करें अनुरोध भेजें
response = requests.get(url)

try:
    # LXML के FromString विधि का उपयोग करके प्रतिक्रिया की HTML सामग्री को पार्स करें
    parser = fromstring(response.text)

    # पहले <h1> टैग का टेक्स्ट कंटेंट खोजने के लिए XPath का उपयोग करें, जो एक <div> टैग के अंदर है और जो <body> टैग का सीधा बच्चा है।

    title = parser.xpath('/html/body/div/h1/text()')[0]

    # शीर्षक प्रिंट करें
    print(title)
except IndexError:
    # उस मामले को संभालें जहां XPATH क्वेरी कोई परिणाम वापस नहीं करता है
    print('No <h1> tag found in the specified location.')
except etree.XMLSyntaxError as parse_err:
    # पार्सिंग के दौरान XML सिंटैक्स त्रुटियों को संभालें
    print(f'Error while parsing HTML: {parse_err}')
except Exception as e:
    # किसी भी अन्य अपवाद को संभालें
    print(f'An unexpected error occurred: {e}')

निकाले गए डेटा को सहेजना

एक बार जब आप HTML तत्वों से सफलतापूर्वक डेटा निकाल लेते हैं, तो अगला कदम इस डेटा को सहेजना है। पायथन स्क्रैप किए गए डेटा को सहेजने के लिए कई विकल्प प्रदान करता है, जिसमें सीएसवी फ़ाइलों, JSON फ़ाइलों और डेटाबेस को सहेजना शामिल है। विभिन्न स्वरूपों का उपयोग करके निकाले गए डेटा को कैसे बचाया जाए, इसका अवलोकन किया गया है:

एक CSV फ़ाइल में डेटा सहेजना

CSV (अल्पविराम-अलग मान) सारणीबद्ध डेटा को संग्रहीत करने के लिए एक सरल और व्यापक रूप से उपयोग किया जाने वाला प्रारूप है। पायथन में CSV मॉड्यूल CSV फ़ाइलों को डेटा लिखना आसान बनाता है।


import csv

# नमूना आंकड़ा
data = {
    'title': 'Example Title',
    'paragraphs': ['Paragraph 1', 'Paragraph 2', 'Paragraph 3']
}

# एक CSV फ़ाइल में डेटा सहेजें
with open('scraped_data.csv', mode='w', newline='', encoding='utf-8') as file:
    writer = csv.writer(file)
    writer.writerow(['Title', 'Paragraph'])
    for paragraph in data['paragraphs']:
        writer.writerow([data['title'], paragraph])

print('Data saved to scraped_data.csv')

एक JSON फ़ाइल में डेटा सहेजना

JSON (जावास्क्रिप्ट ऑब्जेक्ट नोटेशन) एक हल्का डेटा-इंटरचेंज प्रारूप है जो पढ़ने और लिखने में आसान है। पायथन में JSON मॉड्यूल JSON प्रारूप में डेटा सहेजने के तरीके प्रदान करता है।


import json

# नमूना आंकड़ा
data = {
    'title': 'Example Title',
    'paragraphs': ['Paragraph 1', 'Paragraph 2', 'Paragraph 3']
}

# एक JSON फ़ाइल में डेटा सहेजें
with open('scraped_data.json', mode='w', encoding='utf-8') as file:
    json.dump(data, file, ensure_ascii=False, indent=4)

print('Data saved to scraped_data.json')

नाटककार के साथ उन्नत वेब स्क्रैपिंग तकनीक

नाटककार गतिशील सामग्री को स्क्रैप करने और वेब तत्वों के साथ बातचीत करने के लिए एक शक्तिशाली उपकरण है। यह जावास्क्रिप्ट-भारी वेबसाइटों को संभाल सकता है जो कि स्थिर HTML पार्सर नहीं कर सकते।

नाटककार स्थापित करें और इसे सेट करें:


pip install playwright
playwright install

गतिशील सामग्री को स्क्रैप करना

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

2n.png

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

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

HTML सामग्री को तब एलएक्सएमएल के FromString विधि का उपयोग करके एक तत्व ट्री बनाने के लिए पार्स किया जाता है। एक XPath क्वेरी का उपयोग ID ProductTitle के साथ एक विशिष्ट तत्व से उत्पाद शीर्षक की पाठ सामग्री को निकालने के लिए किया जाता है। स्क्रिप्ट में उन मामलों को प्रबंधित करने के लिए त्रुटि हैंडलिंग शामिल है जहां XPATH क्वेरी परिणाम वापस नहीं करता है, जहां पार्सिंग के दौरान XML सिंटैक्स त्रुटियां हैं, या किसी अन्य अप्रत्याशित अपवादों को। अंत में, tlxml'she निकाले गए उत्पाद शीर्षक मुद्रित किया जाता है, और सत्र को समाप्त करने के लिए ब्राउज़र संदर्भ और ब्राउज़र बंद हो जाते हैं।

रन फ़ंक्शन को Sync_playwright द्वारा शुरू किए गए एक नाटककार सत्र के भीतर निष्पादित किया जाता है, यह सुनिश्चित करते हुए कि पूरी प्रक्रिया को एक नियंत्रित वातावरण के भीतर प्रबंधित और निष्पादित किया जाता है। यह संरचना वेब स्क्रैपिंग कार्य करते समय मजबूती और त्रुटि लचीलापन सुनिश्चित करती है।


from playwright.sync_api import Playwright, sync_playwright
from lxml.html import fromstring, etree


def run(playwright: Playwright) -> None:
   # प्रॉक्सी सर्वर को परिभाषित करें
   proxy = {"server": "https://IP:PORT", "username": "LOGIN", "password": "PASSWORD"}

   # निर्दिष्ट प्रॉक्सी और नॉन-हेडलेस मोड में एक नया ब्राउज़र इंस्टेंस लॉन्च करें
   browser = playwright.chromium.launch(
       headless=False,
       proxy=proxy,
       slow_mo=50,
       args=['--ignore-certificate-errors'],
   )

   # एक नया ब्राउज़र संदर्भ बनाएं
   context = browser.new_context(ignore_https_errors=True)

   # ब्राउज़र संदर्भ में एक नया पृष्ठ खोलें
   page = context.new_page()

   # निर्दिष्ट अमेज़ॅन उत्पाद पृष्ठ पर नेविगेट करें
   page.goto(
       "https://www.amazon.com/A315-24P-R7VH-Display-Quad-Core-Processor-Graphics/dp/B0BS4BP8FB/",
       timeout=10000,
   )

   # पृष्ठ को पूरी तरह से लोड करने के लिए प्रतीक्षा करें
   page.wait_for_load_state("load")

   # ड्रॉपडाउन मेनू से एक विशिष्ट उत्पाद शैली का चयन करें
   page.locator("#dropdown_selected_style_name").click()

   # एक विशिष्ट उत्पाद विकल्प का चयन करें
   page.click('//*[@id="native_dropdown_selected_style_name_1"]')
   page.wait_for_load_state("load")

   # लोड किए गए पृष्ठ की HTML सामग्री प्राप्त करें
   html_content = page.content()

   try:
       # LXML के FromString विधि का उपयोग करके HTML सामग्री को पार्स करें
       parser = fromstring(html_content)

       # उत्पाद शीर्षक की पाठ सामग्री निकालने के लिए XPath का उपयोग करें
       product_title = parser.xpath('//span[@id="productTitle"]/text()')[0].strip()

       # निकाले गए उत्पाद शीर्षक को प्रिंट करें
       print({"Product Title": product_title})
   except IndexError:
       # उस मामले को संभालें जहां XPATH क्वेरी कोई परिणाम वापस नहीं करता है
       print('Product title not found in the specified location.')
   except etree.XMLSyntaxError as parse_err:
       # पार्सिंग के दौरान XML सिंटैक्स त्रुटियों को संभालें
       print(f'Error while parsing HTML: {parse_err}')
   except Exception as e:
       # किसी भी अन्य अपवाद को संभालें
       print(f'An unexpected error occurred: {e}')

   # ब्राउज़र संदर्भ और ब्राउज़र को बंद करें
   context.close()
   browser.close()


# नाटककार सत्र शुरू करने और स्क्रिप्ट चलाने के लिए Sync_playwright का उपयोग करें
with sync_playwright() as playwright:
   run(playwright)

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

टिप्पणियाँ:

0 टिप्पणियाँ