येल्प से डेटा स्क्रैपिंग डेटा स्थानीय रेस्तरां में मूल्यवान अंतर्दृष्टि प्रदान कर सकता है, जिसमें नाम, URL, व्यंजन और रेटिंग जैसे विवरण शामिल हैं। अनुरोधों और LXML पायथन लाइब्रेरीज़ का उपयोग करते हुए, यह ट्यूटोरियल दिखाएगा कि Yelp खोज परिणामों को कैसे परिमार्जन किया जाए। कई तकनीकों को कवर किया जाएगा, जिसमें प्रॉक्सी का उपयोग करना, हेडर को संभालना और XPATH के साथ डेटा निकालने सहित शामिल होंगे।
स्क्रैपिंग प्रक्रिया शुरू करने से पहले, सुनिश्चित करें कि आपके पास पायथन स्थापित है और आवश्यक पुस्तकालय हैं:
pip install requests
pip install lxml
ये पुस्तकालय हमें Yelp को HTTP अनुरोध भेजने में मदद करेंगे, HTML सामग्री को पार्स करें, और हमारे द्वारा आवश्यक डेटा निकालें।
सबसे पहले, हमें HTML सामग्री प्राप्त करने के लिए Yelp खोज परिणाम पृष्ठ पर एक GET अनुरोध भेजने की आवश्यकता है। यहाँ यह कैसे करना है:
import requests
# येल्प खोज पृष्ठ url
url = "https://www.yelp.com/search?find_desc=restaurants&find_loc=San+Francisco%2C+CA"
# HTML सामग्री लाने के लिए एक अनुरोध प्राप्त करें
response = requests.get(url)
# जाँच करें कि क्या अनुरोध सफल था
if response.status_code == 200:
print("Successfully fetched the page content")
else:
print("Failed to retrieve the page content")
किसी वेबसाइट पर अनुरोध करते समय, उपयुक्त HTTP हेडर को शामिल करना आवश्यक है। हेडर में अनुरोध के बारे में मेटाडेटा हो सकता है, जैसे कि उपयोगकर्ता एजेंट, जो अनुरोध करने वाले ब्राउज़र या टूल की पहचान करता है। इन हेडर को शामिल करने से लक्ष्य वेबसाइट द्वारा अवरुद्ध या थ्रॉटलिंग से बचने में मदद मिल सकती है।
यहां बताया गया है कि आप हेडर कैसे सेट कर सकते हैं:
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': 'no-cache',
'dnt': '1',
'pragma': 'no-cache',
'priority': 'u=0, i',
'sec-ch-ua': '"Not)A;Brand";v="99", "Google Chrome";v="127", "Chromium";v="127"',
'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/127.0.0.0 Safari/537.36',
}
response = requests.get(url, headers=headers)
जब बड़ी मात्रा में पृष्ठों को स्क्रैप किया जाता है, तो आपके आईपी पते को लक्ष्य साइट द्वारा अवरुद्ध किए जाने का जोखिम होता है। इसे रोकने के लिए, प्रॉक्सी सर्वर का उपयोग करने की सिफारिश की जाती है। इस गाइड के लिए, गतिशील प्रॉक्सी सर्वर का उपयोग करना उचित है जो स्वचालित रोटेशन की सुविधा देता है। इस तरह, आपको केवल एक बार प्रॉक्सी सर्वर सेटिंग्स सेट करने की आवश्यकता है, और रोटेशन समय -समय पर आईपी पते को बदलकर पहुंच बनाए रखने में मदद करेगा, जिससे अवरुद्ध होने की संभावना कम हो जाएगी।
proxies = {
'http': 'http://username:password@proxy-server:port',
'https': 'https://username:password@proxy-server:port'
}
response = requests.get(url, headers=headers, proxies=proxies)
एक बार जब हमारे पास HTML सामग्री होती है, तो अगला कदम इसे पार्स करने और संबंधित डेटा को निकालना है। हम इस उद्देश्य के लिए LXML लाइब्रेरी का उपयोग करेंगे।
from lxml import html
# LXML का उपयोग करके HTML सामग्री को पार्स करें
parser = html.fromstring(response.content)
हमें खोज परिणाम पृष्ठ पर व्यक्तिगत रेस्तरां लिस्टिंग को लक्षित करने की आवश्यकता है। इन तत्वों को XPath अभिव्यक्तियों का उपयोग करके पहचाना जा सकता है। Yelp के लिए, लिस्टिंग आमतौर पर एक विशिष्ट डेटा-परीक्षण विशेषता के साथ एक DIV तत्व में लपेटा जाता है।
# व्यक्तिगत रेस्तरां तत्व निकालें
elements = parser.xpath('//div[@data-testid="serp-ia-card"]')[2:-1]
XPath HTML दस्तावेज़ से नोड्स को नेविगेट करने और चुनने के लिए एक शक्तिशाली उपकरण है। इस ट्यूटोरियल में, हम प्रत्येक रेस्तरां तत्व से रेस्तरां का नाम, URL, व्यंजन और रेटिंग निकालने के लिए XPath अभिव्यक्तियों का उपयोग करेंगे।
यहां प्रत्येक डेटा बिंदु के लिए विशिष्ट XPaths हैं:
अब जब हमारे पास HTML सामग्री है और संभावित IP अवरुद्ध करने को संभाला है, तो हम प्रत्येक रेस्तरां लिस्टिंग से आवश्यक डेटा निकाल सकते हैं।
restaurants_data = []
# प्रत्येक रेस्तरां तत्व पर पुनरावृत्ति
for element in elements:
# रेस्तरां का नाम निकालें
name = element.xpath('.//div[@class="businessName__09f24__HG_pC y-css-ohs7lg"]/div/h3/a/text()')[0]
# रेस्तरां URL निकालें
url = element.xpath('.//div[@class="businessName__09f24__HG_pC y-css-ohs7lg"]/div/h3/a/@href')[0]
# व्यंजनों को निकालें
cuisines = element.xpath('.//div[@class="priceCategory__09f24___4Wsg iaPriceCategory__09f24__x9YrM y-css-2hdccn"]/div/div/div/a/button/span/text()')
# रेटिंग निकालें
rating = element.xpath('.//div[@class="y-css-9tnml4"]/@aria-label')[0]
# डेटा स्टोर करने के लिए एक शब्दकोश बनाएं
restaurant_info = {
"name": name,
"url": url,
"cuisines": cuisines,
"rating": rating
}
# सूची में रेस्तरां की जानकारी जोड़ें
restaurants_data.append(restaurant_info)
डेटा निकालने के बाद, हमें इसे एक संरचित प्रारूप में सहेजने की आवश्यकता है। JSON इस उद्देश्य के लिए एक व्यापक रूप से इस्तेमाल किया जाने वाला प्रारूप है।
import json
# डेटा को एक JSON फ़ाइल में सहेजें
with open('yelp_restaurants.json', 'w') as f:
json.dump(restaurants_data, f, indent=4)
print("Data extraction complete. Saved to yelp_restaurants.json")
import requests
from lxml import html
import json
# येल्प खोज पृष्ठ url
url = "https://www.yelp.com/search?find_desc=restaurants&find_loc=San+Francisco%2C+CA"
# एक ब्राउज़र अनुरोध की नकल करने के लिए हेडर सेट करें
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
'Accept-Language': 'en-US,en;q=0.5'
}
# यदि आवश्यक हो तो परदे के पीछे सेट करें
proxies = {
'http': 'http://username:password@proxy-server:port',
'https': 'https://username:password@proxy-server:port'
}
# HTML सामग्री लाने के लिए एक अनुरोध प्राप्त करें
response = requests.get(url, headers=headers, proxies=proxies)
# जाँच करें कि क्या अनुरोध सफल था
if response.status_code == 200:
print("Successfully fetched the page content")
else:
print("Failed to retrieve the page content")
# LXML का उपयोग करके HTML सामग्री को पार्स करें
parser = html.fromstring(response.content)
# व्यक्तिगत रेस्तरां तत्व निकालें
elements = parser.xpath('//div[@data-testid="serp-ia-card"]')[2:-1]
# निकाले गए डेटा को धारण करने के लिए एक सूची शुरू करें
restaurants_data = []
# प्रत्येक रेस्तरां तत्व पर पुनरावृत्ति
for element in elements:
# रेस्तरां का नाम निकालें
name = element.xpath('.//div[@class="businessName__09f24__HG_pC y-css-ohs7lg"]/div/h3/a/text()')[0]
# रेस्तरां URL निकालें
url = element.xpath('.//div[@class="businessName__09f24__HG_pC y-css-ohs7lg"]/div/h3/a/@href')[0]
# व्यंजनों को निकालें
cuisines = element.xpath('.//div[@class="priceCategory__09f24___4Wsg iaPriceCategory__09f24__x9YrM y-css-2hdccn"]/div/div/div/a/button/span/text()')
# रेटिंग निकालें
rating = element.xpath('.//div[@class="y-css-9tnml4"]/@aria-label')[0]
# डेटा स्टोर करने के लिए एक शब्दकोश बनाएं
restaurant_info = {
"name": name,
"url": url,
"cuisines": cuisines,
"rating": rating
}
# सूची में रेस्तरां की जानकारी जोड़ें
restaurants_data.append(restaurant_info)
# डेटा को एक JSON फ़ाइल में सहेजें
with open('yelp_restaurants.json', 'w') as f:
json.dump(restaurants_data, f, indent=4)
print("Data extraction complete. Saved to yelp_restaurants.json")
यह उपयोगकर्ताओं के लिए HTTP हेडर को ठीक से कॉन्फ़िगर करना और प्रतिबंधों को दरकिनार करने और अवरुद्ध करने से बचने के लिए प्रॉक्सी का उपयोग करना महत्वपूर्ण है। एक अनुकूलित और सुरक्षित स्क्रैपिंग अनुभव के लिए, आईपी रोटेशन को स्वचालित करने पर विचार करें। गतिशील आवासीय या मोबाइल प्रॉक्सी को नियोजित करना इस प्रक्रिया को काफी बढ़ा सकता है, जिससे पता लगाने और अवरुद्ध होने की संभावना को कम किया जा सकता है।
टिप्पणियाँ: 0