किसी वेबसाइट से डेटा की कटाई करना केवल अपनी सामग्री की कटाई से कहीं अधिक है; वहाँ बहुत कुछ है जो इसमें चला जाता है। सीमा, अंतराल और अन्य परिष्कृत ब्लॉकों को बायपास करने के लिए, अतिरिक्त तरीकों की एक भीड़ का उपयोग किया जाना चाहिए जैसे कि पायथन डेटा स्क्रैपिंग।
इस लेख के लिए, हम परिभाषित करेंगे कि पायथन स्क्रैपिंग क्या है, और यह सही ठहराएगा कि यह कार्य के लिए इष्टतम उपकरण क्यों है। और उन रणनीति की रूपरेखा भी बनाती है जो पायथन डेटा स्क्रैपिंग क्षमताओं का उपयोग करती हैं। यह सब साइटों के सबसे सुरक्षित से भी जानकारी प्राप्त करने में मदद करेगा।
यह उपकरण विशेष रूप से वेबसाइटों से डेटा की कटाई के लिए एक उत्कृष्ट संसाधन के रूप में सेवा करने के लिए डिज़ाइन किया गया है। इसकी प्रयोज्य के अलावा, पायथन के पुस्तकालय जैसे कि स्क्रैपी, सेलेनियम और ब्यूटीफुल उल्लेखनीय रूप से शक्तिशाली हैं। इसके अलावा, एक सक्रिय नया समुदाय है जो स्क्रिप्ट विकसित करता रहता है और नए उपयोगकर्ताओं को सहायता प्रदान करता है। यही कारण है कि पायथन का उपयोग आजकल वेब स्क्रैपिंग के लिए किया जाता है। तो, आइए इस समय उपलब्ध मुख्य रणनीतियों को उजागर करें।
यह ब्लॉक उपयोगकर्ता को दिखाएगा कि पायथन में निर्मित अधिक परिष्कृत तकनीकों का उपयोग करके जटिल वेबसाइटों को कैसे परिमार्जन किया जाए। उपयोगकर्ता सीखेंगे कि कैसे:
ये दृष्टिकोण सर्वर से अवरुद्ध या अस्वीकृत होने की संभावना को कम करते हुए पायथन डेटा को प्रभावी बनाने में मदद करेंगे।
अब, एक प्रभावी तरीके से पायथन में स्क्रैपिंग करने के तरीके पर रणनीति पर आगे बढ़ें।
वेबसाइटों का एक ढेर कैप्चा सुरक्षा प्रणालियों को बचाव की एक स्टर्लिंग लाइन के रूप में लागू करता है ताकि उनकी जानकारी को पायथन से डेटा को पूर्वनिर्मित रूप से स्क्रैप करने से सुरक्षित किया जा सके। इस तरह की प्रणालियों को कई साधनों से पीटा जा सकता है, स्वचालित मान्यता सेवाओं को नियोजित करना, जैसे कि 2Captcha या Anti-Captcha, या संज्ञानात्मक रूप से छवियों की पहचान करने के लिए मशीन लर्निंग का उपयोग करना। एक और संभावना प्रश्नों की मात्रा को एक स्तर तक कम कर रही है जो अदालत सूचना संग्रह की उम्मीद के साथ नहीं जुड़ती है।
प्रश्नों को कम शत्रुतापूर्ण बनाने के लिए, उपयोगकर्ताओं को इस तरह से कार्य करना चाहिए जो सामान्य व्यवहार के करीब हो। क्रियाओं के बीच यादृच्छिक समय का परिचय दें, उपयोगकर्ता-एजेंट को स्विच करें, पृष्ठ को स्क्रॉल करें, माउस पॉइंटर को स्थानांतरित करें, लेखन का अनुकरण करें, और इससे भी अधिक। पायथन स्क्रैपिंग टूल के रूप में सेलेनियम या नाटककार का उपयोग स्वचालन को बहुत अधिक मानव जैसी सुविधाओं से देता है ताकि ब्लॉक से बचा जा सके।
import random
import requests
url = 'https://google.com'
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'
]
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',
'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',
}
headers['user-agent'] = random.choice(user_agents)
response = requests.get(url=url, headers=headers)
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
options = webdriver.ChromeOptions()
options.add_argument("--headless") # एक ग्राफिकल इंटरफ़ेस के बिना ब्राउज़र चलाना
driver = webdriver.Chrome(options=options)
driver.get("https://google.com")
# XPath द्वारा एक तत्व खोजें
element = driver.find_element(By.XPATH, "//button[text()=Confirm]")
# कर्सर को स्थानांतरित करने के लिए ActionChains का उपयोग करें
actions = ActionChains(driver)
actions.move_to_element(element).perform()
# ब्राउज़र बंद करें
driver.quit()
कुछ वेबसाइटें नियमित उपयोगकर्ताओं के लिए डिज़ाइन किए गए अतिरिक्त तत्वों को एम्बेड करती हैं जो अदृश्य हैं, फिर भी एक बॉट गलती से उन्हें ट्रिगर कर सकता है। इन तत्वों में छुपाए गए फॉर्म शामिल हैं, उन्हें क्लिक करना और सबमिट करना साइट को बॉट की पहुंच से रोक देगा। डेटा संग्रह से पहले, CSS शैलियों और विशेषताओं का उपयोग करें जैसे प्रदर्शन: कोई नहीं या अपारदर्शिता: 0 और उन शैलियों को उलझाने से परहेज करें।
यदि अनुरोध सही कुकीज़ या सत्र कॉन्फ़िगरेशन के बिना किए जाते हैं, तो कुछ साइटें उन दोहराए गए अनुरोधों को ब्लॉक कर देंगी जिन्हें बहुत सरल माना जाता है। इस समस्या से बचने के लिए, requests.Session() का उपयोग करें, सहेजी गई कुकीज़ का उपयोग करें, और एक वास्तविक उपयोगकर्ता की तरह कार्य करें। हेडर User-Agent को भी बदलना आवश्यक है क्योंकि बॉट को उनके द्वारा पहचाना जाएगा।
इस घटना में कि सर्वर अस्थायी रूप से एक त्रुटि का जवाब देने या वापस करने में विफल रहता है, कमांड को दोहराने के आगे के प्रयासों में डालने से पहले रोकें। एक्सपोनेंशियल बैकऑफ़ अधिक बेहतर है - यह प्रत्येक असफल प्रयास के बाद प्रतीक्षा समय बढ़ाने को संदर्भित करता है। उदाहरण के लिए, कोई इसे 1 सेकंड, 2 सेकंड, फिर 4 सेकंड, आदि तक बढ़ा सकता है। यह वेबसाइट की सीमाओं को कम करते हुए अवरुद्ध होने की संभावना को कम करता है और पायथन के साथ डेटा स्क्रैपिंग वर्कलोड को कम करता है।
import time
import requests
def fetch_with_backoff(url, max_retries=5):
retries = 0
wait_time = 1 # 1 सेकंड की देरी
while retries < max_retries:
try:
response = requests.get(url)
# यदि अनुरोध सफल है, तो परिणाम वापस करें
if response.status_code == 200:
return response.text
print(f"Error {response.status_code}. Retrying in {wait_time} sec.")
except requests.exceptions.RequestException as e:
print(f"Connection error: {e}. Retrying in {wait_time} sec.")
# रिट्री करने से पहले प्रतीक्षा करें
time.sleep(wait_time)
# देरी बढ़ाएं
wait_time *= 2
retries += 1
return None
url = "https://google.com"
html = fetch_with_backoff(url)
कुछ वेबसाइटें चरणों में सामग्री लोड कर सकती हैं, या वे केवल उपयोगकर्ता से कुछ इनपुट प्राप्त करने पर कार्य कर सकते हैं। ऐसे मामलों में, Beautifulsoup जैसे पुस्तकालयों में मदद करने की संभावना नहीं है। इस मामले में, सेलेनियम, कठपुतली और नाटककार के साथ वेब स्क्रैपिंग मदद करेगा। वे आपको एक सामान्य उपयोगकर्ता जैसे पृष्ठ खोलने में सक्षम बनाते हैं, जिसका अर्थ है कि वे बटन पर क्लिक कर सकते हैं, पाठ टाइप कर सकते हैं, और अन्यथा पृष्ठ पर तत्वों के साथ संलग्न हो सकते हैं।
कुछ वेबपेज हैं जो डेटा दिखाने के लिए जावास्क्रिप्ट का उपयोग नहीं करेंगे जब तक कि उपयोगकर्ता ने वेबपेज तक पहुंच नहीं लिया है। इसके साथ, एक मानक HTTP अनुरोध सभी आवश्यक जानकारी प्राप्त नहीं करेगा। सेलेनियम का उपयोग इस तरह की जानकारी एकत्र करने के लिए किया जा सकता है, या ब्राउज़र Devtools का उपयोग करके नेटवर्क अनुरोधों की जांच की जा सकती है। यह छुपा एपीआई समापन बिंदुओं का पता लगाने में सहायता करता है, जिसे बाद में न्यूनतम परेशानी के साथ सूचना पुनर्प्राप्ति के लिए उपयोग किया जा सकता है।
वेबसाइटों का भारी बहुमत आगे की प्रक्रिया के लिए सर्वर को स्वचालित अनुरोधों को पारित करता है। यह सर्वविदित है कि कुछ वेबसाइटें टीएलएस फिंगरप्रिंट को स्वचालित अनुरोधों को अलग करने के साधन के रूप में सत्यापित करती हैं। इसका मतलब है कि सर्वर विभिन्न कनेक्शन विशेषताओं का अध्ययन करता है जैसे कि TLS/SSL ध्यान प्रौद्योगिकी, सिफर और अन्य परिष्कृत कनेक्शन का उपयोग करके ध्यान दें। कस्टम हेडर और प्रॉक्सी का उपयोग करने के अनुरोधों में कनेक्शन विशेषताओं को मिलाकर जो प्राप्त किया जा सकता है।
import requests
url = 'username:password@your-proxy'
proxy = 'your-proxy'
proxies = {
"http": f"http://{proxy}",
"https": f"https://{proxy}",
}
response = requests.get(url=url, proxies=proxies)
यदि कोई वेबसाइट एक सार्वजनिक एपीआई प्रदान करती है, तो स्क्रैपिंग का सहारा लेने के बजाय इसका उपयोग करना उचित है। यह दृष्टिकोण तेजी से, अधिक विश्वसनीय है, और अवरुद्ध होने की संभावना कम है। एपीआई समापन बिंदु खोजने के लिए एक अच्छा शुरुआती बिंदु उन अनुरोधों की जांच कर रहा है जो वेबसाइट बनाती है, जो कि देवटूल में दिखाई देती है। एक एपीआई की अनुपस्थिति में, आपको HTML कोड के साथ काम करना होगा।
वेबसाइटें अपने कोड को संशोधित कर सकती हैं, जो उन्हें स्क्रैप करने में देरी कर सकती हैं। एक काउंटर के रूप में, निम्नलिखित पर विचार करें:
कुछ मामलों में, वेबसाइटों से पायथन के साथ वेब स्क्रैपिंग उनके उपयोग की शर्तों को भंग कर सकती है या यहां तक कि कुछ न्यायालयों में अवैध माना जा सकता है। डेटा को स्क्रैप करने से पहले साइट नीति के साथ -साथ दोनों रोबोट और सेवा की शर्तों की जांच करना अनिवार्य है। यदि कोई उपलब्ध है तो सार्वजनिक एपीआई का उपयोग करना भी सबसे अच्छा है। इसके अलावा, सर्वर पर तनाव को कम करने के लिए अनुरोध संख्याओं पर सीमा निर्धारित करें।
पायथन के साथ उन्नत वेब स्क्रैपिंग अपने स्वयं के फायदे के साथ आता है, लेकिन इसे सही तरीके से करना भी उतना ही महत्वपूर्ण है। हमने कैप्चा को दरकिनार करने, उपयोगकर्ता कार्यों का अनुकरण करने, कुकीज़ और सत्रों का प्रबंधन करने, हनीपॉट से निपटने और एसिंक्रोनस वेब एप्लिकेशन में डेटा की जांच करने के बारे में इस तरह की प्रक्रिया के महत्वपूर्ण पहलुओं पर चर्चा की है।
इसके अलावा, नैतिक पहलू और प्रयुक्त साइट के प्रासंगिक समझौते को ध्यान में रखें। उपलब्ध होने पर एपीआई समापन बिंदुओं का उपयोग करें, और यदि HTML पार्सिंग अपरिहार्य है, तो अवरुद्ध होने और कानूनी जटिलताओं के होने की संभावना को कम करने के लिए सभी दिशानिर्देशों का पालन करें।
पायथन के साथ इस वेब स्क्रैपिंग ट्यूटोरियल विधियों के उपयोग के साथ, जोखिम क्षमता को बहुत कम किया जा सकता है, जबकि प्रभावकारिता को अधिकतम पर बढ़ाया जा सकता है।
टिप्पणियाँ: 0