hi
English
Español
中國人
Tiếng Việt
Deutsch
Українська
Português
Français
Türkçe
한국인
Italiano
Gaeilge
اردو
Indonesia
Polski वेब स्क्रैपिंग airbnb python और Airbnb डेटा स्क्रैप करना रियल एस्टेट बाजार का विश्लेषण करने, किराए की कीमतों की गतिशीलता पर शोध करने, प्रतिस्पर्धी विश्लेषण करने और समीक्षाओं और रेटिंग का मूल्यांकन करने के लिए महत्वपूर्ण है। यह स्क्रैपिंग तकनीकों द्वारा किया जा सकता है। हालाँकि, इस जानकारी तक पहुँचना चुनौतीपूर्ण हो सकता है क्योंकि स्क्रैपिंग साइट की उपयोग शर्तों का उल्लंघन कर सकती है।
अगला, हम एक चरण-दर-चरण गाइड का पता लगाएंगे कि कैसे Python और Selenium का उपयोग करके Airbnb लिस्टिंग को स्क्रैप करने के लिए एक वेब स्क्रैपर विकसित किया जाए। यह गाइड यह भी बताएगा कि प्लेटफ़ॉर्म द्वारा लगाए गए संभावित अवरोधों और प्रतिबंधों से कैसे बचा जाए।
एक वेब स्क्रैपर बनाने का पहला कदम यह समझना है कि जिन वेब पेजों में आप रुचि रखते हैं, उन तक कैसे पहुँचा जाए, क्योंकि वेबसाइटों की संरचना अक्सर बदल सकती है। साइट की संरचना से परिचित होने के लिए, आप ब्राउज़र के डेवलपर टूल का उपयोग करके वेब पेज के HTML का निरीक्षण कर सकते हैं।
डेवलपर टूल तक पहुँचने के लिए, वेबपेज पर राइट-क्लिक करें और “Inspect” चुनें या शॉर्टकट का उपयोग करें:
प्रत्येक लिस्टिंग कंटेनर एक div तत्व में लिपटा होता है जिसमें यह विशेषता होती है: class="g1qv1ctd”।
"location" पर क्लिक करके और "London, UK" टाइप करके हम लंदन में उपलब्ध स्थान तक पहुँच सकते हैं। वेबसाइट चेक-इन और चेक-आउट तिथियाँ जोड़ने का सुझाव देती है। यह उन्हें कमरों की कीमत की गणना करने की अनुमति देता है।
इस पेज के लिए URL कुछ इस प्रकार दिखेगा:
url = "https://www.airbnb.com/s/London--United-Kingdom/homes?tab_id=home_tab&refinement_paths%5B%5D=%2Fhomes&flexible_trip_lengths%5B%5D=one_week&monthly_start_date=2024-01-01&monthly_length=3&price_filter_input_type=0&channel=EXPLORE&query=London%2C%20United%20Kingdom&place_id=ChIJdd4hrwug2EcRmSrV3Vo6llI&date_picker_type=calendar&source=structured_search_input_header&search_type=autocomplete_click"
खोज पेज से, हम Airbnb से उत्पाद लिस्टिंग डेटा के निम्नलिखित गुणों को स्क्रैप करेंगे:
Airbnb python डेटा की वेब स्क्रैपिंग शुरू करने के लिए, आपको पहले अपना विकास वातावरण सेट करना होगा। इसे करने के लिए यहाँ चरण दिए गए हैं:
वर्चुअल वातावरण आपको विभिन्न परियोजनाओं के लिए Python पैकेज और उनकी निर्भरताओं को अलग करने की अनुमति देता है। जब कोई क्रॉस-प्रोजेक्ट हस्तक्षेप नहीं होता है, तो हर परियोजना की निर्भरताएँ सटीक होने की गारंटी होती हैं।
Windows उपयोगकर्ता “venv” नामक एक वर्चुअल वातावरण बना सकते हैं, एडमिनिस्ट्रेटर अधिकारों के साथ एक कमांड प्रॉम्प्ट खोलकर और कमांड चलाकर:
python -m venv venv
नए बनाए गए वर्चुअल वातावरण को सक्रिय करने के लिए, कमांड चलाएँ:
venv\Scripts\activate
एक टर्मिनल खोलें और नीचे दिए गए कमांड को चलाएँ ताकि “venv” नामक एक नया वर्चुअल वातावरण सेट हो सके:
sudo python3 -m venv venv
वर्चुअल वातावरण को सक्रिय करें:
source venv/bin/activate
वर्चुअल वातावरण को निष्क्रिय करने के लिए, बस निम्नलिखित कमांड चलाएँ:
deactivate
अब जब आपने एक वर्चुअल वातावरण सेट कर लिया है, तो आप आवश्यक लाइब्रेरी इंस्टॉल कर सकते हैं।
अपने सक्रिय वर्चुअल वातावरण के भीतर, आवश्यक लाइब्रेरी स्थापित करने के लिए निम्नलिखित कमांड चलाएँ:
pip install selenium beautifulsoup4 lxml seleniumwire
Selenium को चयनित ब्राउज़र के साथ इंटरफ़ेस करने के लिए एक ड्राइवर की आवश्यकता होती है। हम इस गाइड के लिए Chrome का उपयोग करेंगे। हालाँकि, सुनिश्चित करें कि आपने अपने चुने हुए ब्राउज़र के लिए उचित WebDriver इंस्टॉल किया है।
एक बार डाउनलोड हो जाने के बाद, सुनिश्चित करें कि ड्राइवर को ऐसी डायरेक्टरी में रखा गया है जहाँ आपके सिस्टम का PATH वातावरण चर उसे एक्सेस कर सके। इससे Selenium ड्राइवर को ढूँढ सकेगा और ब्राउज़र को नियंत्रित कर सकेगा।
जैसा कि ऊपर बताया गया है, सबसे पहले Seleniumwire और BeautifulSoup लाइब्रेरी को अपने Python फ़ाइल में आयात करना है। यह इस प्रकार दिखता है:
from seleniumwire import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
import time
import csv
import random
हम विभिन्न उपयोगिताओं के लिए `random`, `time`, और `csv` लाइब्रेरी भी आयात करेंगे।
अगला, हम Airbnb द्वारा अवरुद्ध होने से बचने के लिए प्रॉक्सी की एक सूची परिभाषित करते हैं। बिना प्रीमियम प्रॉक्सी के अनुरोध भेजने का प्रयास करने पर, आपको "Access Denied" प्रतिक्रिया मिल सकती है।
आप प्रॉक्सी को इस प्रकार सेट कर सकते हैं:
# परदे की सूची
proxies = [
"username:password@Your_proxy_IP_Address:Your_proxy_port1",
"username:password@Your_proxy_IP_Address:Your_proxy_port2",
"username:password@Your_proxy_IP_Address:Your_proxy_port3",
"username:password@Your_proxy_IP_Address:Your_proxy_port4",
"username:password@Your_proxy_IP_Address:Your_proxy_port5",
]
सुनिश्चित करें कि आप “YourproxyIPAddress” और ”Yourproxy_port” फ़ील्ड को अपने Proxy-seller से प्राप्त संबंधित जानकारी से अनुकूलित करें। साथ ही “username” और “password” प्लेसहोल्डर को अपने वास्तविक क्रेडेंशियल से बदलना न भूलें।
प्रॉक्सी को रोटेट करना वेब स्क्रैपिंग में एक महत्वपूर्ण कदम है। जब किसी वेबसाइट को एक ही IP पते से कई अनुरोध प्राप्त होते हैं तो वह अक्सर बॉट्स और स्क्रेपर्स की पहुँच को ब्लॉक या प्रतिबंधित कर देती है। अलग-अलग प्रॉक्सी IP पतों का उपयोग करके आप पहचान से बच सकते हैं, कई ऑर्गेनिक उपयोगकर्ताओं की तरह दिख सकते हैं और वेबसाइट पर लागू अधिकांश एंटी-स्क्रैपिंग उपायों को बायपास कर सकते हैं।
रोटेशन सेट करने के लिए, “random” लाइब्रेरी को आयात करें। हम `get_proxy()` नामक एक फ़ंक्शन भी परिभाषित करते हैं जो हमारी सूची से एक प्रॉक्सी चुनता है। यह फ़ंक्शन random.choice() विधि का उपयोग करके प्रॉक्सी सूची से एक आइटम को यादृच्छिक रूप से चुनता है।
def get_proxy():
return random.choice(proxies)
अगला, हम `listings()` नामक मुख्य फ़ंक्शन परिभाषित करते हैं। यहाँ हम अपना “ChromeDriver” सेट करेंगे। यह फ़ंक्शन Selenium का उपयोग करके प्रॉपर्टी लिस्टिंग पेज पर नेविगेट करता है, पेज के लोड होने का इंतजार करता है और Beautiful Soup का उपयोग करके HTML को पार्स करता है।
def listings(url):
proxy = get_proxy()
proxy_options = {
"proxy": {
"http": f"http://{proxy}",
"https": f"http://{proxy}",
"no_proxy": "localhost,127.0.0.1",
}
}
chrome_options = Options()
chrome_options.add_argument("--headless")
s = Service(
"C:/Path_To_Your_WebDriver"
) # अपने ChromeDriver के पथ से बदलें
driver = webdriver.Chrome(
service=s, seleniumwire_options=proxy_options, chrome_options=chrome_options
)
driver.get(url)
time.sleep(8) # वेबसाइट के लोड समय के आधार पर समायोजित करें
soup = BeautifulSoup(driver.page_source, "lxml")
driver.quit()
Python का उपयोग करके Airbnb को स्क्रैप करने के लिए, हम एक रैंडम प्रॉक्सी का चयन करके और विकल्पों को सेट करके शुरू करते हैं। ये विकल्प webdriver को कॉन्फ़िगर करने के लिए उपयोग किए जाएंगे। इसके बाद, हम Chrome विकल्प सेट करते हैं। --headless आर्गुमेंट जोड़ें ताकि ब्राउज़र हेडलेस मोड में चले, जिसका अर्थ है कि ब्राउज़र पृष्ठभूमि में ग्राफिकल यूज़र इंटरफ़ेस के बिना चलेगा।
फिर webdriver को सेवा, seleniumwire विकल्प और Chrome विकल्पों के साथ प्रारंभ करें। इसके बाद webdriver का उपयोग दिए गए URL पर नेविगेट करने के लिए किया जाता है। हम पेज को पूरी तरह से लोड होने की अनुमति देने के लिए 8 सेकंड का स्लीप टाइम जोड़ते हैं और फिर Beautiful Soup का उपयोग करके लौटाए गए HTML को पार्स करते हैं। पार्सिंग के बाद, यह webdriver को बंद कर देता है।
एक बार जब आपने सफलतापूर्वक HTML सामग्री प्राप्त कर ली है, तो अगला कदम प्रत्येक प्रॉपर्टी के लिए प्रासंगिक डेटा निकालना है। BeautifulSoup का उपयोग करके, हम संरचना के माध्यम से आसानी से नेविगेट कर सकते हैं और आवश्यक जानकारी वाले सेक्शन ढूँढ सकते हैं।
सबसे पहले, हम पेज पर सभी ब्लॉकों की पहचान करते हैं जो प्रॉपर्टी विवरण रखते हैं। इन सेक्शनों में URL, शीर्षक, विवरण, रेटिंग, मूल्य और कोई भी अतिरिक्त जानकारी शामिल होती है।
listing_elements = soup.find_all("div", class_="g1qv1ctd")
for listing_element in listing_elements:
यह कोड BeautifulSoup के find_all() मेथड का उपयोग करके सभी div टैग ढूँढता है जिनकी class “g1qv1ctd” है। इनमें से प्रत्येक Airbnb पेज पर एकल प्रॉपर्टी का प्रतिनिधित्व करता है। फिर यह उन सभी के माध्यम से लूप करता है ताकि प्रासंगिक डेटा एकत्र किया जा सके।
पाए गए प्रत्येक ब्लॉक के लिए, हम URL निकालते हैं।
URL_element = soup.find("a", class_="rfexzly")
listing_data["Listing URL"] = (
"https://www.airbnb.com" + URL_element["href"] if URL_element else ""
)
हम अपने soup ऑब्जेक्ट में class “rfexzly” वाले एक anchor टैग की खोज करते हैं। यदि मिला, तो यह 'href' एट्रिब्यूट (जो सापेक्ष URL होता है) निकालता है और पूर्ण पता बनाने के लिए इसे बेस URL के साथ जोड़ता है। यदि नहीं मिला, तो त्रुटियों से बचने के लिए खाली स्ट्रिंग का उपयोग किया जाता है।
अगला, हम शीर्षक लेते हैं, जो class “t1jojoys” वाले div टैग के अंदर होता है। हम टेक्स्ट को प्राप्त करते हैं और साफ़ करते हैं। यदि टैग मौजूद नहीं है, तो हम बस एक खाली स्ट्रिंग संग्रहीत करते हैं।
title_element = listing_element.find("div", class_="t1jojoys")
listing_data["Title"] = (
title_element.get_text(strip=True) if title_element else ""
)
Description_element = listing_element.find("span", class_="t6mzqp7")
listing_data["Description"] = (
Description_element.get_text(strip=True) if Description_element else ""
)
जिस तरह हम शीर्षक प्राप्त करते हैं, उसी तरह यह भाग "t6mzqp7" class वाले span टैग को ढूँढता है। हम टेक्स्ट सामग्री निकालते और साफ़ करते हैं, जिसमें प्रॉपर्टी का संक्षिप्त विवरण होता है।
rating_element = listing_element.find("span", class_="ru0q88m")
listing_data["Rating"] = (
rating_element.get_text(strip=True) if rating_element else ""
)
जैसा कि ऊपर कोड में दिखाया गया है, class “ru0q88m” वाला span टैग रेटिंग मान रखता है। हम इसे निकालते और साफ़ करते हैं ताकि अतिरिक्त स्पेस हट जाए।
अंत में, हम मूल्य निकालते हैं।
price_element = listing_element.select_one("._1y74zjx")
listing_data["Price"] = (
f"{price_element.get_text(strip=True)} per night" if price_element else ""
)
यह कोड वर्तमान listing_element के भीतर class "_1y74zjx" वाले तत्व का पता लगाता है। यदि यह तत्व, जो आमतौर पर मूल्य जानकारी रखता है, मिल जाता है, तो इसका टेक्स्ट कंटेंट निकाला जाता है, साफ़ किया जाता है और "per night" जोड़कर अधिक जानकारीपूर्ण मूल्य स्ट्रिंग बनाई जाती है।
कुछ प्रॉपर्टीज़ में अतिरिक्त विवरण शामिल हो सकते हैं।
listing_info_element = listing_element.find("span", {"aria-hidden": "true"})
listing_data["Additional Listing information"] = (
listing_info_element.get_text(strip=True) if listing_info_element else ""
)
हम इस अतिरिक्त जानकारी का पता लगाने के लिए aria-hidden="true" वाले span टैग की खोज करते हैं। एकल प्रॉपर्टी से सभी प्रासंगिक डेटा एकत्र करने के बाद, हम इसे अपनी सूची में जोड़ते हैं:
listings.append(listing_data)
एक बार जब सभी लिस्टिंग प्रोसेस हो जाती हैं, तो हम लिस्टिंग की सूची लौटाते हैं, प्रत्येक को निकाले गए डेटा वाले एक डिक्शनरी के रूप में प्रस्तुत किया जाता है।
return listings
Airbnb के पेजों से डेटा सफलतापूर्वक स्क्रैप करने के बाद, अगला महत्वपूर्ण चरण इस मूल्यवान जानकारी को भविष्य के विश्लेषण और संदर्भ के लिए संग्रहीत करना है। हम इस कार्य के लिए csv लाइब्रेरी का उपयोग करते हैं। हम एक CSV फ़ाइल को write मोड में खोलते हैं और एक csv.DictWriter ऑब्जेक्ट बनाते हैं। इसके बाद हम हेडर और डेटा फ़ाइल में लिखते हैं।
airbnb_listings = listings(url)
csv_file_path = "proxy_web_listings_output.csv"
with open(csv_file_path, "w", encoding="utf-8", newline="") as csv_file:
fieldnames = [
"Listing URL",
"Title",
"Description",
"Rating",
"Price",
"Additional Listing information",
]
writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
writer.writeheader()
for listing in airbnb_listings:
writer.writerow(listing)
print(f"Data has been exported to {csv_file_path}")
यहाँ इस ट्यूटोरियल में उपयोग किया गया Airbnb स्क्रैप करने के लिए पूरा Python कोड है:
from seleniumwire import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
import time
import csv
import random
# परदे की सूची
proxies = [
"username:password@Your_proxy_IP_Address:Your_proxy_port1",
"username:password@Your_proxy_IP_Address:Your_proxy_port2",
"username:password@Your_proxy_IP_Address:Your_proxy_port3",
"username:password@Your_proxy_IP_Address:Your_proxy_port4",
"username:password@Your_proxy_IP_Address:Your_proxy_port5",
]
def get_proxy():
return random.choice(proxies)
def listings(url):
proxy = get_proxy()
proxy_options = {
"proxy": {
"http": f"http://{proxy}",
"https": f"http://{proxy}",
"no_proxy": "localhost,127.0.0.1",
}
}
chrome_options = Options()
chrome_options.add_argument("--headless")
s = Service(
"C:/Path_To_Your_WebDriver"
) # अपने ChromeDriver के पथ से बदलें
driver = webdriver.Chrome(
service=s, seleniumwire_options=proxy_options, chrome_options=chrome_options
)
driver.get(url)
time.sleep(8) # वेबसाइट के लोड समय के आधार पर समायोजित करें
soup = BeautifulSoup(driver.page_source, "lxml")
driver.quit()
listings = []
# पेज पर मौजूद सभी लिस्टिंग एलिमेंट्स खोजें
listing_elements = soup.find_all("div", class_="g1qv1ctd")
for listing_element in listing_elements:
# प्रत्येक लिस्टिंग एलिमेंट से डेटा निकालें
listing_data = {}
# लिस्टिंग URL
URL_element = soup.find("a", class_="rfexzly")
listing_data["Listing URL"] = (
"https://www.airbnb.com" + URL_element["href"] if URL_element else ""
)
# शीर्षक
title_element = listing_element.find("div", class_="t1jojoys")
listing_data["Title"] = (
title_element.get_text(strip=True) if title_element else ""
)
# विवरण
Description_element = listing_element.find("span", class_="t6mzqp7")
listing_data["Description"] = (
Description_element.get_text(strip=True) if Description_element else ""
)
# रेटिंग
rating_element = listing_element.find("span", class_="ru0q88m")
listing_data["Rating"] = (
rating_element.get_text(strip=True) if rating_element else ""
)
# कीमत
price_element = listing_element.select_one("._1y74zjx")
listing_data["Price"] = (
f"{price_element.get_text(strip=True)} per night" if price_element else ""
)
# अतिरिक्त लिस्टिंग जानकारी
listing_info_element = listing_element.find("span", {"aria-hidden": "true"})
listing_data["Additional Listing information"] = (
listing_info_element.get_text(strip=True) if listing_info_element else ""
)
# लिस्टिंग डेटा सूची में जोड़ें
listings.append(listing_data)
return listings
url = "https://www.airbnb.com/s/London--United-Kingdom/homes?tab_id=home_tab&refinement_paths%5B%5D=%2Fhomes&flexible_trip_lengths%5B%5D=one_week&monthly_start_date=2024-01-01&monthly_length=3&price_filter_input_type=0&channel=EXPLORE&query=London%2C%20United%20Kingdom&place_id=ChIJdd4hrwug2EcRmSrV3Vo6llI&date_picker_type=calendar&source=structured_search_input_header&search_type=autocomplete_click"
airbnb_listings = listings(url)
csv_file_path = "proxy_web_listings_output.csv"
with open(csv_file_path, "w", encoding="utf-8", newline="") as csv_file:
fieldnames = [
"Listing URL",
"Title",
"Description",
"Rating",
"Price",
"Additional Listing information",
]
writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
writer.writeheader()
for listing in airbnb_listings:
writer.writerow(listing)
print(f"Data has been exported to {csv_file_path}")
यह कोड सेगमेंट सुनिश्चित करता है कि स्क्रेपर द्वारा एकत्र किया गया कोई भी डेटा CSV फ़ॉर्मेट में "proxyweblistings_output.csv" नामक फ़ाइल में रखा जाए।
हमारे स्क्रेपर के परिणाम “proxy_web_listings_output.csv” नामक CSV फ़ाइल में संग्रहीत किए जाते हैं, जैसा कि नीचे दिखाया गया है।
यह गाइड Python का उपयोग करके Airbnb डेटा लिस्टिंग को स्क्रैप करने का तरीका प्रभावी ढंग से समझाती है, जिससे कीमतें, उपलब्धता और समीक्षाओं जैसे प्रमुख विवरण निकालना संभव होता है। यह प्रॉक्सी का उपयोग करने और उन्हें रोटेट करने के महत्व पर जोर देती है ताकि Airbnb के एंटी-बॉट उपायों द्वारा ब्लॉक होने से बचा जा सके।
scrape airbnb data python और Selenium आपको pricing, availability जैसी मूल्यवान जानकारी तक प्रत्यक्ष पहुँच देते हैं—जो मार्केट रिसर्च, निवेश विश्लेषण या अपनी स्वयं की रियल एस्टेट टूल्स बनाने के लिए प्रमुख अंतर्दृष्टियाँ हैं। हालाँकि प्रक्रिया के साथ तकनीकी चुनौतियाँ (और कुछ कानूनी ग्रे क्षेत्र) आती हैं, सही वातावरण स्थापित करना, यह समझना कि वेबसाइट कैसे काम करती है, और proxies तथा headless browsers जैसी टूल्स का उपयोग करना अधिकांश बाधाओं को पार करने में मदद कर सकता है। बस यह सुनिश्चित करें कि प्लेटफ़ॉर्म की उपयोग शर्तों का सम्मान करें और हमेशा डेटा को जिम्मेदारी से संभालें।
टिप्पणियाँ: 0