Python में Selenium के साथ प्रॉक्सी का उपयोग करना

Scraping and Proxy Management Expert
क्या आपको वेब स्क्रैपिंग के लिए सेलेनियम का उपयोग करके एक बॉट के रूप में पहचाना गया है?
समझ में आता है। हालाँकि सेलेनियम गतिशील वेबपेजों को स्क्रैप करने के लिए एक शानदार उपकरण है, लेकिन यह अपने आप में परिष्कृत एंटी-बॉट सुरक्षा के खिलाफ काम करने में असमर्थ है। आप दर सीमाओं को नियंत्रित करने, भौगोलिक प्रतिबंधों से बचने और IP प्रतिबंधों को रोकने के लिए अपने सेलेनियम स्क्रैपर में एक प्रॉक्सी जोड़ सकते हैं।
सेलेनियम प्रॉक्सी: यह क्या है?
एक प्रॉक्सी क्लाइंट और सर्वर के बीच एक मध्यस्थ के रूप में कार्य करता है। इसका उपयोग करके, क्लाइंट भौगोलिक सीमाओं को दरकिनार करता है और अन्य सर्वरों को गुमनाम, सुरक्षित अनुरोध भेजता है।
प्रॉक्सी सर्वर का उपयोग हेडलेस ब्राउज़र द्वारा उसी तरह किया जा सकता है जैसे HTTP क्लाइंट द्वारा किया जाता है। वेबसाइटों तक पहुँचने पर, एक सेलेनियम प्रॉक्सी आपके IP पते की सुरक्षा करने और प्रतिबंधों को दरकिनार करने में मदद करता है।
प्रॉक्सी समर्थन के साथ सेलेनियम साइट स्क्रैपिंग और परीक्षण जैसे ब्राउज़र ऑटोमेशन कार्यों के लिए बहुत उपयोगी है। वेब स्क्रैपिंग के लिए सेलेनियम में प्रॉक्सी कैसे सेट अप करें, यह जानने के लिए पढ़ते रहें!
सेलेनियम प्रॉक्सी को कैसे कॉन्फ़िगर करें
निम्नलिखित कोड लाइन एक हेडलेस क्रोम ड्राइवर लोड करती है और httpbin पर नेविगेट करती है, एक वेबसाइट जो क्लाइंट का IP पता प्रदान करती है। स्क्रिप्ट अंत में HTML उत्तर प्रिंट करता है।
language
# pip install selenium webdriver-manager
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options
# set Chrome options to run in headless mode
options = Options()
options.add_argument("--headless=new")
# initialize Chrome driver
driver = webdriver.Chrome(
service=Service(ChromeDriverManager().install()),
options=options
)
# navigate to the target webpage
driver.get("https://httpbin.io/ip")
# print the HTML of the target webpage
print(driver.page_source)
# release the resources and close the browser
driver.quit()
कोड द्वारा निम्नलिखित HTML मुद्रित किया जाएगा:
language
<html><head><meta name="color-scheme" content="light dark"><meta charset="utf-8"></head><body><pre>{
"origin": "50.217.226.40:80"
}
</pre><div class="json-formatter-container"></div></body></html>
सेलेनियम में, प्रॉक्सी सेट करने के लिए, आपको यह करना होगा:
- एक विश्वसनीय प्रॉक्सी सर्वर प्राप्त करें
- इसे क्रोम विकल्प के
--proxy-server
फ़ील्ड में दर्ज करें - उस पृष्ठ पर जाएँ जिसे आप देखना चाहते हैं।
सबसे पहले, मुफ्त प्रॉक्सी पता प्राप्त करने के लिए मुफ्त प्रॉक्सी सूची वेबसाइट पर जाएँ। सेलेनियम को विकल्पों के साथ सेट करें ताकि क्रोम खोलने के लिए प्रॉक्सी का उपयोग किया जाए। उसके बाद, गंतव्य वेबपेज के बॉडी टेक्स्ट को प्रिंट करें।
language
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
# define the proxy address and port
proxy = "20.235.159.154:80"
# set Chrome options to run in headless mode using a proxy
options = Options()
options.add_argument("--headless=new")
options.add_argument(f"--proxy-server={proxy}")
# initialize Chrome driver
driver = webdriver.Chrome(
service=Service(ChromeDriverManager().install()),
options=options
)
# navigate to the target webpage
driver.get("https://httpbin.io/ip")
# print the body content of the target webpage
print(driver.find_element(By.TAG_NAME, "body").text)
# release the resources and close the browser
driver.quit()
अब, नियंत्रित क्रोम इंस्टेंस द्वारा किया गया प्रत्येक अनुरोध निर्दिष्ट प्रॉक्सी के माध्यम से रूट किया जाएगा।
प्रॉक्सी सर्वर IP और साइट प्रतिक्रिया मेल खाते हैं। इससे पता चलता है कि सेलेनियम वेबसाइटों को देखने के लिए प्रॉक्सी सर्वर का उपयोग कर रहा है।
सेलेनियम में प्रॉक्सी प्रमाणीकरण
कुछ प्रॉक्सी सर्वर वैध क्रेडेंशियल वाले उपयोगकर्ताओं को छोड़कर अपने सर्वर तक पहुँचने से रोकने के लिए प्रमाणीकरण का उपयोग करते हैं। यह आमतौर पर प्रीमियम प्रॉक्सी या वाणिज्यिक समाधान का उपयोग करते समय होता है।
प्रमाणित प्रॉक्सी URL में उपयोगकर्ता नाम और पासवर्ड प्रदान करने के लिए सेलेनियम सिंटैक्स इस प्रकार है:
language
<PROXY_PROTOCOL>://<YOUR_USERNAME>:<YOUR_PASSWORD>@<PROXY_IP_ADDRESS>:<PROXY_PORT>
हालाँकि, चूँकि क्रोम ड्राइवर डिफ़ॉल्ट रूप से उपयोगकर्ता नाम और पासवर्ड को अनदेखा करता है, इसलिए --proxy-server में URL दर्ज करने से काम नहीं चलेगा। इस स्थिति में एक तृतीय-पक्ष प्लगइन जैसे सेलेनियम वायर मदद कर सकता है।
सेलेनियम वायर की मदद से, आप ब्राउज़र अनुरोधों को अपनी इच्छानुसार संशोधित कर सकते हैं और स्वयं अनुरोधों तक पहुँच प्राप्त कर सकते हैं। इसे स्थापित करने के लिए, नीचे दिए गए कमांड का उपयोग करें:
language
pip install blinker==1.7.0 selenium-wire
प्रॉक्सी प्रमाणीकरण को संभालने के लिए, नीचे दिखाए गए अनुसार सेलेनियम वायर का उपयोग करें:
language
from seleniumwire import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
# configure the proxy
proxy_username = "<YOUR_USERNAME>"
proxy_password = "<YOUR_PASSWORD>"
proxy_address = "20.235.159.154"
proxy_port = "80"
# formulate the proxy url with authentication
```python
proxy_url = f"http://{proxy_username}:{proxy_password}@{proxy_address}:{proxy_port}"
# सेलेनियम-वायर विकल्प सेट करें प्रॉक्सी का उपयोग करने के लिए
seleniumwire_options = {
"proxy": {
"http": proxy_url,
"https": proxy_url
},
}
# हेडलेस मोड में चलाने के लिए क्रोम विकल्प सेट करें
options = Options()
options.add_argument("--headless=new")
# सर्विस, सेलेनियम-वायर विकल्प और क्रोम विकल्प के साथ क्रोम ड्राइवर को इनिशियलाइज़ करें
driver = webdriver.Chrome(
service=Service(ChromeDriverManager().install()),
seleniumwire_options=seleniumwire_options,
options=options
)
# लक्ष्य वेबपेज पर नेविगेट करें
driver.get("https://httpbin.io/ip")
# लक्ष्य वेबपेज की बॉडी सामग्री प्रिंट करें
print(driver.find_element(By.TAG_NAME, "body").text)
# संसाधनों को जारी करें और ब्राउज़र बंद करें
driver.quit()
क्या आप लगातार वेब स्क्रैपिंग ब्लॉक से थक चुके हैं?
स्क्रैपलेस: उपलब्ध सर्वश्रेष्ठ ऑल-इन-वन ऑनलाइन स्क्रैपिंग समाधान!
हमारे बुद्धिमान, उच्च-प्रदर्शन प्रॉक्सी रोटेशन के साथ गुमनाम रहें और आईपी-आधारित प्रतिबंधों से बचें:
इसे मुफ़्त में आज़माएँ!
सर्वश्रेष्ठ सेलेनियम प्रॉक्सी प्रोटोकॉल
सेलेनियम प्रॉक्सी के लिए प्रोटोकॉल चुनने के लिए सबसे लोकप्रिय विकल्प HTTP, HTTPS और SOCKS5 हैं।
HTTPS प्रॉक्सी, HTTP प्रॉक्सी के विपरीत, इंटरनेट पर स्थानांतरित किए जाने वाले डेटा को एन्क्रिप्ट करके सुरक्षा की एक अतिरिक्त डिग्री जोड़ते हैं। इसलिए उत्तरार्द्ध अधिक पसंदीदा और सुरक्षित है।
SoCKS5, या SOCKS, सेलेनियम प्रॉक्सी के लिए एक और उपयोगी प्रोटोकॉल है। यह एक अधिक लचीला प्रोटोकॉल है क्योंकि यह ईमेल और फ़ाइल स्थानांतरण प्रोटोकॉल जैसे ऑनलाइन ट्रैफ़िक की अधिक विविधता को संभाल सकता है।
सभी बातों पर विचार करने पर, वेब स्क्रैपिंग और क्रॉलिंग HTTP और HTTPS प्रॉक्सी से बहुत लाभ उठाते हैं, जबकि गैर-HTTP ट्रैफ़िक ड्यूटी SOCKS के लिए उपयुक्त हैं।
सेलेनियम के लिए पायथन में रोटेटिंग प्रॉक्सी का उपयोग करें
यदि आपकी स्क्रिप्ट थोड़े समय में कई क्वेरी भेजती है, तो सर्वर इसे संदिग्ध के रूप में चिह्नित कर सकता है और आपके आईपी को प्रतिबंधित कर सकता है। जब आप विशिष्ट IP पतों का उपयोग करने का प्रयास करते हैं, तो आपको डेटा स्क्रैप करने में कम सफलता मिलती है, क्योंकि वेबसाइटें उन पतों से अनुरोधों की पहचान कर उन्हें ब्लॉक कर सकती हैं।
फिर भी, रोटेटिंग प्रॉक्सी रणनीति का उपयोग करके इस समस्या का समाधान किया जा सकता है। एक निश्चित समय या अनुरोधों के बाद, प्रॉक्सी बदलने के परिणामस्वरूप आपका अंतिम IP लगातार बदलता रहेगा। यह आपको हर बार एक अलग उपयोगकर्ता के रूप में प्रदर्शित करके सर्वर द्वारा प्रतिबंधित होने से बचाता है।
आइए देखें कि सेलेनियम में प्रॉक्सी रोटेटर बनाने के लिए सेलेनियम-वायर का उपयोग कैसे करें।
सबसे पहले एक प्रॉक्सी पूल स्थापित करना आवश्यक है। हम इस उदाहरण में कई मुफ़्त प्रॉक्सी का उपयोग करेंगे।
निम्नानुसार, उन्हें एक सरणी में रखें:
language
PROXIES = [
"http://19.151.94.248:88",
"http://149.169.197.151:80",
# ...
"http://212.76.118.242:97"
]
इसके बाद, random.choice()
का उपयोग करके एक यादृच्छिक प्रॉक्सी निकालें, जिसका उपयोग आप ड्राइवर का नया इंस्टेंस शुरू करने के लिए कर सकते हैं। आपका तैयार कोड इस तरह दिखना चाहिए:
language
from seleniumwire import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
import random
# प्रॉक्सी की सूची रोटेट करने के लिए
PROXIES = [
"http://20.235.159.154:80",
"http://149.169.197.151:80",
# ...
"http://212.76.118.242:97"
]
# बेतरतीब ढंग से एक प्रॉक्सी का चयन करें
proxy = random.choice(PROXIES)
# सेलेनियम-वायर विकल्प सेट करें प्रॉक्सी का उपयोग करने के लिए
seleniumwire_options = {
"proxy": {
"http": proxy,
"https": proxy
},
}
# हेडलेस मोड में चलाने के लिए क्रोम विकल्प सेट करें
options = Options()
options.add_argument("--headless=new")
# सर्विस, सेलेनियम-वायर विकल्प और क्रोम विकल्प के साथ क्रोम ड्राइवर को इनिशियलाइज़ करें
driver = webdriver.Chrome(
service=Service(ChromeDriverManager().install()),
seleniumwire_options=seleniumwire_options,
options=options
)
# लक्ष्य वेबपेज पर नेविगेट करें
driver.get("https://httpbin.io/ip")
# लक्ष्य वेबपेज की बॉडी सामग्री प्रिंट करें
print(driver.find_element(By.TAG_NAME, "body").text)
# संसाधनों को जारी करें और ब्राउज़र बंद करें
driver.quit()
वास्तव में, मुफ़्त प्रॉक्सी का उपयोग करने से आमतौर पर अवरोध उत्पन्न होगा। हालाँकि हमने मूल सिद्धांतों को स्पष्ट करने के लिए उनका उपयोग किया है, लेकिन आपको व्यावहारिक प्रोजेक्ट के लिए उन पर कभी निर्भर नहीं होना चाहिए।
सेलेनियम ग्रिड की त्रुटि 403: प्रॉक्सी निषिद्ध है
क्रॉस-प्लेटफ़ॉर्म स्क्रिप्ट और रिमोट ब्राउज़र नियंत्रण का समानांतर निष्पादन सेलेनियम ग्रिड का उपयोग करके संभव बनाया गया है। फिर भी, यदि आप इसका उपयोग करते हैं, तो आपको वेब स्क्रैपिंग के दौरान सबसे अधिक बार होने वाली समस्याओं में से एक प्राप्त हो सकती है: त्रुटि 403: प्रॉक्सी के लिए निषिद्ध
। ऐसा होने के दो कारण हैं:
- पोर्ट 4444 पहले से ही किसी अन्य प्रक्रिया द्वारा उपयोग में है।
- आपके RemoteWebDriver अनुरोधों द्वारा सही URL प्राप्त नहीं किया जा रहा है।
यदि यह समस्या का समाधान नहीं करता है, तो सुनिश्चित करें कि आप रिमोट ड्राइवर को नीचे बताए गए सही हब URL से कनेक्ट कर रहे हैं:
language
import selenium.webdriver as webdriver
# ...
webdriver.Remote('http://localhost:4444/wd/hub', {})
निष्कर्ष
प्रॉक्सी सर्वर एंटी-बॉट डिटेक्शन सिस्टम को बायपास करने में मदद कर सकते हैं, लेकिन उन्हें बहुत सारे मानव रखरखाव की आवश्यकता होती है और वे हमेशा विश्वसनीय नहीं होते हैं। स्क्रैपलेस जैसी वेब स्क्रैपिंग एपीआई का उपयोग करें, ताकि किसी भी एंटी-बॉट उपायों के आसपास विश्वसनीय रूप से जा सकें और प्रॉक्सी को खोजने और सेट करने की परेशानी से खुद को बचा सकें। स्क्रैपलेस का निःशुल्क परीक्षण प्राप्त करें!
स्क्रैपलेस में, हम लागू कानूनों, विनियमों और वेबसाइट गोपनीयता नीतियों का सख्ती से पालन करते हुए केवल सार्वजनिक रूप से उपलब्ध डेटा तक पहुंचते हैं। इस ब्लॉग की सामग्री केवल प्रदर्शन उद्देश्यों के लिए है और इसमें कोई भी अवैध या उल्लंघनकारी गतिविधियां शामिल नहीं हैं। हम इस ब्लॉग या तृतीय-पक्ष लिंक से जानकारी के उपयोग के लिए कोई गारंटी नहीं देते हैं और सभी दायित्व से इनकार करते हैं। किसी भी स्क्रैपिंग गतिविधियों में शामिल होने से पहले, अपने कानूनी सलाहकार से परामर्श लें और लक्ष्य वेबसाइट की सेवा की शर्तों की समीक्षा करें या आवश्यक अनुमतियाँ प्राप्त करें।