पायथन के साथ Google मैप्स डेटा को स्क्रैप करने के लिए गाइड

टिप्पणियाँ: 0

पायथन का उपयोग करके Google मैप्स से डेटा स्क्रैप करने से स्थानों, व्यवसायों और सेवाओं के बारे में मूल्यवान जानकारी के संग्रह की अनुमति मिलती है, जो बाजार विश्लेषण के लिए फायदेमंद है, इष्टतम नए स्थल स्थानों की पहचान करना, वर्तमान निर्देशिकाओं, प्रतियोगी विश्लेषण को बनाए रखना, और स्थानों की लोकप्रियता का पता लगाना। यह गाइड पायथन लाइब्रेरी रिक्वेस्ट और एलएक्सएमएल का उपयोग करते हुए Google मैप्स से जानकारी निकालने के तरीके पर एक व्यापक वॉकथ्रू प्रदान करता है। इसमें अनुरोध करने, प्रतिक्रियाओं को संभालने, संरचित डेटा को पार्स करने और इसे CSV फ़ाइल में निर्यात करने के लिए विस्तृत निर्देश शामिल हैं।

अपना पर्यावरण स्थापित करना

सुनिश्चित करें कि आपके पास निम्नलिखित पायथन लाइब्रेरी स्थापित हैं:

  • अनुरोध;
  • lxml;
  • CSV (मानक पुस्तकालय)।

यदि आवश्यक हो तो PIP का उपयोग करके इन पुस्तकालयों को स्थापित करें:


pip install requests
pip install lxml

नीचे, हम उदाहरणों के साथ पूरा, स्क्रैपिंग की एक चरण-दर-चरण प्रक्रिया प्रस्तुत करेंगे।

Google मैप्स से डेटा स्क्रैप करने के लिए चरण-दर-चरण गाइड

निम्नलिखित वर्गों में, हम Google मैप्स से डेटा को स्क्रैप करने के लिए एक विस्तृत चरण-दर-चरण प्रक्रिया के माध्यम से चलेंगे, प्रत्येक चरण के माध्यम से मार्गदर्शन करने के लिए दृश्य उदाहरणों के साथ पूरा करें।

चरण 1। लक्ष्य URL को परिभाषित करें

वह URL निर्दिष्ट करें जिससे आप डेटा को परिमार्जन करना चाहते हैं।


url = "https link"

चरण 2। हेडर और प्रॉक्सी को परिभाषित करें

एक वास्तविक उपयोगकर्ता की गतिविधियों की नकल करने के लिए उपयुक्त हेडर स्थापित करना महत्वपूर्ण है, जिससे बॉट के रूप में ध्वजांकित होने की संभावना को काफी कम कर दिया जाता है। इसके अतिरिक्त, प्रॉक्सी सर्वर को एकीकृत करना किसी भी ब्लॉक को दरकिनार करके निरंतर स्क्रैपिंग गतिविधियों को बनाए रखने में मदद करता है जो एकल आईपी पते से जुड़े अनुरोध सीमाओं से अधिक हो सकता है।


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-arch': '"x86"',
    'sec-ch-ua-bitness': '"64"',
    'sec-ch-ua-full-version-list': '"Not)A;Brand";v="99.0.0.0", "Google Chrome";v="127.0.6533.72", "Chromium";v="127.0.6533.72"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-model': '""',
    'sec-ch-ua-platform': '"Linux"',
    'sec-ch-ua-platform-version': '"6.5.0"',
    'sec-ch-ua-wow64': '?0',
    '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',
}

proxies = {
    "http": "http://username:password@your_proxy_ip:port",
    "https": "https://username:password@your_proxy_ip:port",
}

चरण 3। पृष्ठ सामग्री प्राप्त करें

Google मानचित्र URL को एक अनुरोध भेजें और पृष्ठ सामग्री प्राप्त करें:


import requests

response = requests.get(url, headers=headers, proxies=proxies)
if response.status_code == 200:
    page_content = response.content
else:
    print(f"Failed to retrieve the page. Status code: {response.status_code}")

चरण 4। HTML सामग्री को पार्स करें

HTML सामग्री को पार्स करने के लिए LXML का उपयोग करें:


from lxml import html

parser = html.fromstring(page_content)

डेटा XPaths की पहचान

HTML दस्तावेज़ की संरचना को समझना डेटा को सही ढंग से निकालने के लिए महत्वपूर्ण है। आपको उन डेटा बिंदुओं के लिए XPath अभिव्यक्तियों की पहचान करने की आवश्यकता है जिन्हें आप स्क्रैप करना चाहते हैं। यहां बताया गया है कि आप इसे कैसे कर सकते हैं:

  1. वेब पेज का निरीक्षण करें: एक वेब ब्राउज़र में Google मैप्स पेज खोलें और ब्राउज़र के डेवलपर टूल (राइट-क्लिक करें) का उपयोग करें > HTML संरचना की जांच करने के लिए निरीक्षण करें)।
  2. प्रासंगिक तत्वों का पता लगाएं: HTML तत्वों की तलाश करें जिसमें वह डेटा है जिसे आप स्क्रैप करना चाहते हैं (जैसे, रेस्तरां के नाम, पते)।
  3. XPaths लिखें: HTML संरचना के आधार पर, डेटा निकालने के लिए XPath अभिव्यक्तियाँ लिखें। इस गाइड के लिए, XPaths हैं:

रेस्तरां का नाम:


//div[@jscontroller="AtSb"]/div/div/div/a/div/div/div/span[@class="OSrXXb"]/text()

पता:


 //div[@jscontroller="AtSb"]/div/div/div/a/div/div/div[2]/text()

विकल्प:


 = ', '.join(result.xpath('.//div[@jscontroller="AtSb"]/div/div/div/a/div/div/div[4]/div/span/span[1]//text()'))

भू -अक्षांश:


//div[@jscontroller="AtSb"]/div/@data-lat

भू देश:


 //div[@jscontroller="AtSb"]/div/@data-lng

चरण 5। डेटा निकालना

पहचान किए गए XPATH का उपयोग करके डेटा निकालें:


results = parser.xpath('//div[@jscontroller="AtSb"]')
data = []

for result in results:
    restaurant_name = result.xpath('.//div/div/div/a/div/div/div/span[@class="OSrXXb"]/text()')[0]
    address = result.xpath('.//div/div/div/a/div/div/div[2]/text()')[0]
    options = ', '.join(result.xpath('.//div/div/div/a/div/div/div[4]/div/span/span[1]//text()'))
    geo_latitude = result.xpath('.//div/@data-lat')[0]
    geo_longitude = result.xpath('.//div/@data-lng')[0]

    # डेटा सूची में जोड़ें
    data.append({
        "restaurant_name": restaurant_name,
        "address": address,
        "options": options,
        "geo_latitude": geo_latitude,
        "geo_longitude": geo_longitude
    })

चरण 6। CSV के लिए डेटा सहेजें

निकाले गए डेटा को CSV फ़ाइल में सहेजें:


import csv

with open("google_maps_data.csv", "w", newline='', encoding='utf-8') as csv_file:
    writer = csv.DictWriter(csv_file, fieldnames=["restaurant_name", "address", "options", "geo_latitude", "geo_longitude"])
    writer.writeheader()
    for entry in data:
        writer.writerow(entry)

पूर्ण कोड

यहाँ Google मानचित्र डेटा को स्क्रैप करने के लिए पूरा कोड है:


import requests
from lxml import html
import csv

# लक्ष्य URL और हेडर को परिभाषित करें
url = "https://www.google.com/search?sca_esv=04f11db33f1535fb&sca_upv=1&tbs=lf:1,lf_ui:4&tbm=lcl&sxsrf=ADLYWIIFVlh6WQCV6I2gi1yj8ZyvZgLiRA:1722843868819&q=google+map+restaurants+near+me&rflfq=1&num=10&sa=X&ved=2ahUKEwjSs7fGrd2HAxWh1DgGHbLODasQjGp6BAgsEAE&biw=1920&bih=919&dpr=1"
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-arch': '"x86"',
    'sec-ch-ua-bitness': '"64"',
    'sec-ch-ua-full-version-list': '"Not)A;Brand";v="99.0.0.0", "Google Chrome";v="127.0.6533.72", "Chromium";v="127.0.6533.72"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-model': '""',
    'sec-ch-ua-platform': '"Linux"',
    'sec-ch-ua-platform-version': '"6.5.0"',
    'sec-ch-ua-wow64': '?0',
    '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',
}
proxies = {
    "http": "http://username:password@your_proxy_ip:port",
    "https": "https://username:password@your_proxy_ip:port",
}

# पृष्ठ सामग्री प्राप्त करें
response = requests.get(url, headers=headers, proxies=proxies)
if response.status_code == 200:
    page_content = response.content
else:
    print(f"Failed to retrieve the page. Status code: {response.status_code}")
    exit()

# HTML सामग्री को पार्स करें
parser = html.fromstring(page_content)

# XPath का उपयोग करके डेटा निकालें
results = parser.xpath('//div[@jscontroller="AtSb"]')
data = []

for result in results:
    restaurant_name = result.xpath('.//div/div/div/a/div/div/div/span[@class="OSrXXb"]/text()')[0]
    address = result.xpath('.//div/div/div/a/div/div/div[2]/text()')[0]
    options = ', '.join(result.xpath('.//div/div/div/a/div/div/div[4]/div/span/span[1]//text()'))
    geo_latitude = result.xpath('.//div/@data-lat')[0]
    geo_longitude = result.xpath('.//div/@data-lng')[0]

    # डेटा सूची में जोड़ें
    data.append({
        "restaurant_name": restaurant_name,
        "address": address,
        "options": options,
        "geo_latitude": geo_latitude,
        "geo_longitude": geo_longitude
    })

# CSV के लिए डेटा सहेजें
with open("google_maps_data.csv", "w", newline='', encoding='utf-8') as csv_file:
    writer = csv.DictWriter(csv_file, fieldnames=["restaurant_name", "address", "options", "geo_latitude", "geo_longitude"])
    writer.writeheader()
    for entry in data:
        writer.writerow(entry)

print("Data has been successfully scraped and saved to google_maps_data.csv.")

प्रभावी वेब स्क्रैपिंग के लिए, सही अनुरोध हेडर और प्रॉक्सी का उपयोग करना महत्वपूर्ण है। इष्टतम प्रॉक्सी विकल्प डेटा सेंटर या आईएसपी प्रॉक्सी हैं, जो उच्च गति और कम विलंबता प्रदान करते हैं। हालांकि, चूंकि ये स्थिर प्रॉक्सी हैं, इसलिए प्रभावी रूप से अवरुद्ध करने को रोकने के लिए आईपी रोटेशन को लागू करना आवश्यक है। एक वैकल्पिक और अधिक उपयोगकर्ता के अनुकूल विकल्प आवासीय प्रॉक्सी का उपयोग करना है। ये गतिशील परदे के पीछे रोटेशन प्रक्रिया को सरल बनाते हैं और एक उच्च ट्रस्ट कारक होता है, जिससे वे ब्लॉक को दरकिनार करने में अधिक प्रभावी होते हैं।

टिप्पणियाँ:

0 टिप्पणियाँ