छवि डेटा सेट उत्पन्न करते समय याहू छवि खोज से छवियों को स्क्रैप करना महत्वपूर्ण है। यह गाइड बताता है कि याहू इमेज सर्च से पायथन का उपयोग करके छवियों को कैसे परिमार्जन किया जाए और साथ ही HTML पार्सिंग तकनीकों के लिए LXML के साथ संयोजन में लाइब्रेरी का अनुरोध किया। यह याहू बॉट डिटेक्शन सिस्टम द्वारा पकड़े जाने से बचने के लिए प्रॉक्सी उपयोग पर भी छूता है।
याहू छवियों से छवियों को परिमार्जन करने के लिए, आपको निम्नलिखित पायथन लाइब्रेरी की आवश्यकता होगी:
सुनिश्चित करें कि आपके पास सभी आवश्यक पुस्तकालय स्थापित हैं। PIP का उपयोग करके उन्हें स्थापित करें:
pip install requests
pip install lxml
या एकल कमांड का उपयोग करें:
pip install requests lxml
सबसे पहले, हमें अपने खुरचनी के लिए आवश्यक पुस्तकालयों को आयात करने की आवश्यकता है।
import requests
from lxml import html
अगला, हम याहू छवियों पर एक खोज करेंगे।
यहां हम एक खोज क्वेरी को पिल्लों के रूप में परिभाषित करेंगे और आवश्यक हेडर के साथ याहू छवियों की खोज के लिए एक अनुरोध भेजेंगे। अनुरोध हेडर एक ब्राउज़र अनुरोध की नकल करने के लिए महत्वपूर्ण हैं, जो कुछ बुनियादी बॉट डिटेक्शन तंत्र को दरकिनार करने में मदद करता है।
# एक ब्राउज़र अनुरोध की नकल करने के लिए हेडर को परिभाषित करें
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": "max-age=0",
"dnt": "1",
"priority": "u=0, i",
"sec-ch-ua": '"Google Chrome";v="125", "Chromium";v="125", "Not.A/Brand";v="24"',
"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/125.0.0.0 Safari/537.36",
}
# खोज क्वेरी को परिभाषित करें
search_query = "puppies"
# याहू छवियों खोज पृष्ठ पर एक अनुरोध प्राप्त करें
response = requests.get(
url=f"https://images.search.yahoo.com/search/images?p={search_query}",
headers=headers
)
याहू से प्रतिक्रिया प्राप्त करने के बाद, हमें छवि URL निकालने के लिए HTML को पार्स करने की आवश्यकता है। हम इस उद्देश्य के लिए LXML का उपयोग करते हैं।
# HTML प्रतिक्रिया को पार्स करें
parser = fromstring(response.text)
# एक्सपैथ का उपयोग करके छवि url निकालें
images_urls = parser.xpath("//li[contains(@id, 'resitem-')]/a//@src")
फ़ंक्शन फ्रॉमस्ट्रिंग का उपयोग HTML प्रतिक्रिया पाठ को पार्स करने के लिए किया जाता है। XPath का उपयोग छवियों के URL निकालने के लिए किया जाता है। नीचे दिए गए स्क्रीनशॉट से पता चलता है कि XPATH कैसे प्राप्त किया गया था।
छवि URL की सूची के साथ, हमें अब प्रत्येक छवि को डाउनलोड करने की आवश्यकता है।
यहां, हम COUNT (INDEX) और URL (पता) दोनों को निकालने के लिए Images_urls सूची के माध्यम से लूप करेंगे। प्रत्येक छवि को संबंधित URL को GET अनुरोध भेजकर डाउनलोड किया जाएगा।
# प्रत्येक छवि डाउनलोड करें और इसे एक फ़ाइल में सहेजें
for count, url in enumerate(images_urls):
response = requests.get(url=url, headers=headers)
अंत में, हम स्थानीय फाइल सिस्टम में डाउनलोड की गई छवियों को सहेजते हैं। हम एक फ़ंक्शन डाउनलोड_फाइल को परिभाषित करते हैं जो फ़ाइल बचत प्रक्रिया को संभालता है।
यह फ़ंक्शन काउंट (अद्वितीय फ़ाइलनाम बनाने के लिए) और प्रतिक्रिया (छवि डेटा युक्त) लेता है। यह सामग्री-प्रकार हेडर से फ़ाइल एक्सटेंशन निर्धारित करता है और फ़ाइल को ./images/ निर्देशिका में सहेजता है।
def download_file(count, response):
# सामग्री-प्रकार हेडर से फ़ाइल एक्सटेंशन प्राप्त करें
extension = response.headers.get("Content-Type").split("/")[1]
filename = "./images/" + str(count) + f".{extension}"
# यदि यह मौजूद नहीं है तो निर्देशिका बनाएं
os.makedirs(os.path.dirname(filename), exist_ok=True)
# फ़ाइल को प्रतिक्रिया सामग्री लिखें
with open(filename, "wb") as f:
f.write(response.content)
लूप के भीतर इस फ़ंक्शन को कॉल करके, हम प्रत्येक डाउनलोड की गई छवि को सहेजते हैं:
for count, url in enumerate(images_urls):
response = requests.get(url=url, headers=headers)
download_file(count, response)
याहू से डेटा को स्क्रैप करते समय, याहू के बॉट डिटेक्शन मैकेनिज्म के बारे में पता होना महत्वपूर्ण है। याहू मुख्य रूप से इन तकनीकों का उपयोग स्वचालित बॉट्स की पहचान और अवरुद्ध करने के लिए करता है:
याहू बॉट डिटेक्शन मैकेनिज्म द्वारा अवरुद्ध होने से बचने के लिए, खासकर जब एक ही आईपी से कई अनुरोध करते हैं, तो हम अपने आईपी पते को मास्क करने के लिए प्रॉक्सी का उपयोग करते हैं।
अलग -अलग प्रॉक्सी के माध्यम से हमारे अनुरोधों को रूट करके, हम कई आईपी पते पर हमारी स्क्रैपिंग गतिविधि को वितरित कर सकते हैं, इसलिए संभावना को कम कर सकते हैं।
proxies = {
'http': 'http://USER:PASS@HOST:PORT',
'https': 'http://USER:PASS@HOST:PORT'
}
response = requests.get(url, headers=headers, proxies=proxies, verify=False)
यहाँ याहू छवियों से छवियों को स्क्रैप करने के लिए पूरी स्क्रिप्ट है जो कि प्रॉक्सी का उपयोग करके खोज परिणाम है:
import os
import requests
from lxml.html import fromstring
def download_file(count, response):
"""
./Images/ निर्देशिका में एक फ़ाइल की प्रतिक्रिया की सामग्री को सहेजता है।
Args:
count (int): फ़ाइल के लिए एक अद्वितीय पहचानकर्ता।
response (requests.Response): फ़ाइल सामग्री युक्त HTTP प्रतिक्रिया।
"""
# सामग्री-प्रकार हेडर से फ़ाइल एक्सटेंशन प्राप्त करें
extension = response.headers.get("Content-Type").split("/")[1]
filename = "./images/" + str(count) + f".{extension}"
# यदि यह मौजूद नहीं है तो निर्देशिका बनाएं
os.makedirs(os.path.dirname(filename), exist_ok=True)
# फ़ाइल को प्रतिक्रिया सामग्री लिखें
with open(filename, "wb") as f:
f.write(response.content)
def main():
"""
छवियों की खोज करने और उन्हें डाउनलोड करने के लिए मुख्य कार्य।
यह फ़ंक्शन निम्नलिखित चरण करता है:
1. अनुरोध हेडर सेट करता है।
2. याहू पर पिल्लों की छवियों की खोज।
3. छवि URL निकालने के लिए HTML प्रतिक्रिया को पार्स करता है।
4. प्रत्येक छवि को डाउनलोड करता है और इसे ./images/ निर्देशिका को बचाता है।
"""
# एक ब्राउज़र अनुरोध की नकल करने के लिए हेडर को परिभाषित करें
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": "max-age=0",
"dnt": "1",
"priority": "u=0, i",
"sec-ch-ua": '"Google Chrome";v="125", "Chromium";v="125", "Not.A/Brand";v="24"',
"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/125.0.0.0 Safari/537.36",
}
# दर सीमित दर को बायपास करने के लिए प्रॉक्सी को परिभाषित करें
proxies = {"http": "http://USER:PASS@HOST:PORT", "https": "http://USER:PASS@HOST:PORT"}
# खोज क्वेरी को परिभाषित करें
search_query = "puppies"
# याहू छवियों खोज पृष्ठ पर एक अनुरोध प्राप्त करें
response = requests.get(
url=f"https://images.search.yahoo.com/search/images?p={search_query}",
headers=headers,
proxies=proxies,
verify=False
)
# HTML प्रतिक्रिया को पार्स करें
parser = fromstring(response.text)
# एक्सपैथ का उपयोग करके छवि url निकालें
images_urls = parser.xpath("//li[contains(@id, 'resitem-')]/a//@src")
# प्रत्येक छवि डाउनलोड करें और इसे एक फ़ाइल में सहेजें
for count, url in enumerate(images_urls):
response = requests.get(url=url, headers=headers, proxies=proxies, verify=False)
download_file(count, response)
if __name__ == "__main__":
main()
याहू छवि खोज से छवियों को स्क्रैप करना पायथन का उपयोग करके डेटा संग्रह और विश्लेषण कार्यों को स्वचालित करने के लिए एक शक्तिशाली तकनीक है। HTTP अनुरोधों के लिए अनुरोध लाइब्रेरी और HTML पार्सिंग के लिए LXML लाइब्रेरी का उपयोग करके, आप छवि URL को कुशलता से निकाल सकते हैं और छवियों को डाउनलोड कर सकते हैं। प्रॉक्सी को शामिल करने से आपको व्यापक स्क्रैपिंग गतिविधियों के दौरान आईपी प्रतिबंध का पता लगाने और रोकने में मदद मिलती है।
टिप्पणियाँ: 0