कैसे पायथन का उपयोग करके Spotify डेटा को स्क्रैप करें

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

Spotify प्लेलिस्ट डेटा गानों, कलाकारों और अन्य ट्रैक विवरणों की जानकारी एकत्र करने के लिए उपयोगी हो सकता है। Spotify कुछ डेटा तक विस्तृत पहुंच API कुंजी के बिना नहीं देता, लेकिन Python के लिए Playwright का उपयोग करके हम डायनामिक कंटेंट तक पहुंच सकते हैं और Spotify की वेबसाइट से सीधे प्लेलिस्ट डेटा निकाल सकते हैं। यह लेख दिखाता है कि कैसे ट्रैक नाम, बैंड नाम, लिंक और ट्रैकों की लंबाई जैसी जानकारी को स्क्रैप करने के लिए Playwright को लागू किया जाए।

आवश्यकताएँ और इंस्टॉलेशन

शुरू करने के लिए, डायनामिक पेज कंटेंट और HTML पार्सिंग को संभालने के लिए Playwright और lxml इंस्टॉल करें:


pip install playwright
pip install lxml

फिर, Playwright ब्राउज़रों को सक्षम करने के लिए आवश्यक ब्राउज़र बाइनरी डाउनलोड करने हेतु निम्न कमांड का उपयोग करें:


playwright install

इन सबको सेटअप करने के बाद, हम Spotify को स्क्रैप करने के लिए तैयार हैं।

Spotify स्क्रैपिंग प्रक्रिया: चरण-दर-चरण गाइड

Spotify की सामग्री डायनामिक रूप से लोड होती है, इसलिए requests या अन्य सरल HTTP लाइब्रेरी का उपयोग करके JavaScript द्वारा रेंडर की गई सभी जानकारी को कैप्चर नहीं किया जा सकता। Playwright एक ब्राउज़र ऑटोमेशन लाइब्रेरी है जो हमें डायनामिक वेबसाइटों के साथ ऐसे इंटरैक्ट करने देती है जैसे हम स्वयं उन्हें ब्राउज़ कर रहे हों, जिसका अर्थ है कि हम स्क्रैपिंग से पहले JavaScript के लोड होने का इंतजार कर सकते हैं।

Playwright प्रॉक्सी कॉन्फ़िगरेशन को भी सपोर्ट करता है, जिससे आवश्यक होने पर हम विभिन्न IP का उपयोग कर सकते हैं ताकि Spotify पर रेट-लिमिटिंग या भौगोलिक प्रतिबंधों से बचा जा सके।

नीचे आपको स्क्रैपिंग की विस्तृत, चरण-दर-चरण गाइड मिलेगी, जिसमें स्पष्ट और दृश्य समझ के लिए कोड उदाहरण भी शामिल हैं।

चरण 1। HTML कंटेंट प्राप्त करने के लिए फ़ंक्शन सेटअप करना

fetch_html_content फ़ंक्शन Playwright वातावरण को इनिशियलाइज़ करता है, एक ब्राउज़र लॉन्च करता है और Spotify प्लेलिस्ट URL पर नेविगेट करता है। यहां, हम `headless=False` सेट करते हैं ताकि ब्राउज़र इंटरफ़ेस दृश्यमान रहे (डिबगिंग के लिए उपयोगी); स्वचालित कार्यों के लिए, इसे True पर सेट करने से निष्पादन तेज़ होगा।

wait_until='networkidle' विकल्प नेटवर्क गतिविधि के स्थिर होने का इंतजार करता है, ताकि पेज कंटेंट को कैप्चर करने से पहले सभी तत्व सही तरीके से लोड हो जाएं।


from playwright.async_api import async_playwright

async def fetch_html_content(playlist_url):
    async with async_playwright() as p:
        # यदि आवश्यक हो तो प्रॉक्सी सेटअप के साथ ब्राउज़र लॉन्च करें
        browser = await p.chromium.launch(headless=False)
        page = await browser.new_page()

        # URL पर नेविगेट करें
        await page.goto(playlist_url, wait_until='networkidle')

        # नेटवर्क गतिविधि को व्यवस्थित करने के लिए समय दें
        await page.wait_for_timeout(3000)

        # पृष्ठ सामग्री कैप्चर करें
        page_content = await page.content()

        # ब्राउज़र बंद करें
        await browser.close()

        return page_content


Playwright में आईपी पते प्रमाणीकरण के साथ एक प्रॉक्सी का उपयोग करने के लिए, लॉन्च फ़ंक्शन को निम्नानुसार कॉन्फ़िगर करें:


browser = await p.chromium.launch(headless=True, proxy={"server": "http://your-proxy-server:port"})

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

चरण 2। HTML सामग्री को पार्स करना

lxml के FromString फ़ंक्शन के साथ, हम HTML सामग्री के लिए एक पार्सर बनाते हैं। यह हमें XPath अभिव्यक्तियों का उपयोग करके विशिष्ट डेटा का पता लगाने और निकालने की अनुमति देता है।


from lxml.html import fromstring

page_content = await fetch_html_content('https link')
parser = fromstring(page_content)

चरण 3। ट्रैक की जानकारी निकालना

XPath चयनकर्ताओं के साथ, हम प्लेलिस्ट में प्रत्येक ट्रैक के लिए निम्न विवरण एकत्र करते हैं:

  1. ट्रैक नाम;
  2. URL ट्रैक;
  3. कलाकार के नाम;
  4. कलाकार URL;
  5. ट्रैक अवधि।

track_names = parser.xpath('//div[@data-testid="tracklist-row"]//a[@data-testid="internal-track-link"]/div/text()')
track_urls = parser.xpath('//div[@data-testid="tracklist-row"]//a[@data-testid="internal-track-link"]/@href')
track_urls_with_domain = [f"https://open.spotify.com/{url}" for url in track_urls]
artist_names = parser.xpath('//div[@data-testid="tracklist-row"]//div[@data-encore-id="text"]/a/text()')
artist_urls = parser.xpath('//div[@data-testid="tracklist-row"]//div[@data-encore-id="text"]/a/@href')
artist_urls_with_domain = [f"https://open.spotify.com/{url}" for url in artist_urls]
track_durations = parser.xpath('//div[@data-testid="tracklist-row"]//div[@class="PAqIqZXvse_3h6sDVxU0"]/div/text()')

पूरी तरह से योग्य लिंक बनाने के लिए URL सूचियों को Spotify डोमेन के साथ पूरा किया जाता है।

चरण 4। एक सीएसवी फ़ाइल में डेटा सहेजना

डेटा इकट्ठा करने के बाद, हम इसे एक CSV फ़ाइल में लिखते हैं। फ़ाइल में प्रत्येक पंक्ति में ट्रैक नाम, ट्रैक URL, कलाकार का नाम, कलाकार URL और ट्रैक अवधि शामिल हैं।


import csv

rows = zip(track_names, track_urls_with_domain, artist_names, artist_urls_with_domain, track_durations)
csv_filename = "spotify_playlist.csv"

with open(csv_filename, mode='w', newline='') as file:
    writer = csv.writer(file)
    # हेडर लिखें
    writer.writerow(["track_names", "track_urls", "artist_names", "artist_urls", "track_durations"])
    # पंक्तियाँ लिखें
    writer.writerows(rows)

print(f"Data successfully written to {csv_filename}")

यह एक अच्छी तरह से संरचित सीएसवी फ़ाइल बनाता है जो आगे के अनुप्रयोगों में विश्लेषण और उपयोग करना आसान है।

प्रॉक्सी सपोर्ट के साथ पूरा कोड उदाहरण

यहाँ पूर्ण कोड है, एक सुव्यवस्थित Spotify स्क्रैपिंग प्रक्रिया के लिए सभी चरणों को संयोजित करना:


from playwright.async_api import async_playwright
from lxml.html import fromstring
import csv

async def fetch_html_content(playlist_url):
    async with async_playwright() as p:
        # यदि आवश्यक हो तो प्रॉक्सी विकल्प के साथ ब्राउज़र लॉन्च करें
        browser = await p.chromium.launch(headless=False, proxy={"server": "http://your-proxy-server:port", "username": "username", "password": "password"})
        page = await browser.new_page()

        # URL पर नेविगेट करें
        await page.goto(playlist_url, wait_until='networkidle')
        
        # किसी भी नेटवर्क गतिविधि को व्यवस्थित करने के लिए प्रतीक्षा करें
        await page.wait_for_timeout(3000)
        
        # पृष्ठ सामग्री कैप्चर करें
        page_content = await page.content()

        # ब्राउज़र बंद करें
        await browser.close()
        
        return page_content

page_content = asyncio.run(fetch_html_content('https link'))
parser = fromstring(page_content)


# विवरण निकालें
track_names = parser.xpath('//div[@data-testid="tracklist-row"]//a[@data-testid="internal-track-link"]/div/text()')
track_urls = parser.xpath('//div[@data-testid="tracklist-row"]//a[@data-testid="internal-track-link"]/@href')
track_urls_with_domain = [f"https://open.spotify.com/{url}" for url in track_urls]
artist_names = parser.xpath('//div[@data-testid="tracklist-row"]//div[@data-encore-id="text"]/a/text()')
artist_urls = parser.xpath('//div[@data-testid="tracklist-row"]//div[@data-encore-id="text"]/a/@href')
artist_urls_with_domain = [f"https://open.spotify.com/{url}" for url in artist_urls]
track_durations = parser.xpath('//div[@data-testid="tracklist-row"]//div[@class="PAqIqZXvse_3h6sDVxU0"]/div/text()')

# CSV को लिखें
rows = zip(track_names, track_urls_with_domain, artist_names, artist_urls_with_domain, track_durations)
csv_filename = "spotify_playlist.csv"

with open(csv_filename, mode='w', newline='') as file:
    writer = csv.writer(file)
    writer.writerow(["track_names", "track_urls", "artist_names", "artist_urls", "track_durations"])
    writer.writerows(rows)

print(f"Data successfully written to {csv_filename}")

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

टिप्पणियाँ:

0 टिप्पणियाँ