Spotify प्लेलिस्ट डेटा गानों, कलाकारों और अन्य ट्रैक विवरणों की जानकारी एकत्र करने के लिए उपयोगी हो सकता है। Spotify कुछ डेटा तक विस्तृत पहुंच API कुंजी के बिना नहीं देता, लेकिन Python के लिए Playwright का उपयोग करके हम डायनामिक कंटेंट तक पहुंच सकते हैं और Spotify की वेबसाइट से सीधे प्लेलिस्ट डेटा निकाल सकते हैं। यह लेख दिखाता है कि कैसे ट्रैक नाम, बैंड नाम, लिंक और ट्रैकों की लंबाई जैसी जानकारी को स्क्रैप करने के लिए Playwright को लागू किया जाए।
शुरू करने के लिए, डायनामिक पेज कंटेंट और HTML पार्सिंग को संभालने के लिए Playwright और lxml इंस्टॉल करें:
pip install playwright
pip install lxml
फिर, Playwright ब्राउज़रों को सक्षम करने के लिए आवश्यक ब्राउज़र बाइनरी डाउनलोड करने हेतु निम्न कमांड का उपयोग करें:
playwright install
इन सबको सेटअप करने के बाद, हम Spotify को स्क्रैप करने के लिए तैयार हैं।
Spotify की सामग्री डायनामिक रूप से लोड होती है, इसलिए requests या अन्य सरल HTTP लाइब्रेरी का उपयोग करके JavaScript द्वारा रेंडर की गई सभी जानकारी को कैप्चर नहीं किया जा सकता। Playwright एक ब्राउज़र ऑटोमेशन लाइब्रेरी है जो हमें डायनामिक वेबसाइटों के साथ ऐसे इंटरैक्ट करने देती है जैसे हम स्वयं उन्हें ब्राउज़ कर रहे हों, जिसका अर्थ है कि हम स्क्रैपिंग से पहले JavaScript के लोड होने का इंतजार कर सकते हैं।
Playwright प्रॉक्सी कॉन्फ़िगरेशन को भी सपोर्ट करता है, जिससे आवश्यक होने पर हम विभिन्न IP का उपयोग कर सकते हैं ताकि Spotify पर रेट-लिमिटिंग या भौगोलिक प्रतिबंधों से बचा जा सके।
नीचे आपको स्क्रैपिंग की विस्तृत, चरण-दर-चरण गाइड मिलेगी, जिसमें स्पष्ट और दृश्य समझ के लिए कोड उदाहरण भी शामिल हैं।
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"})
यह निर्दिष्ट प्रॉक्सी सर्वर के माध्यम से अनुरोधों को रूट करेगा, आपके मूल आईपी को मास्किंग करेगा और संभावित स्क्रैपिंग प्रतिबंधों से बचने में मदद करेगा।
lxml के FromString फ़ंक्शन के साथ, हम HTML सामग्री के लिए एक पार्सर बनाते हैं। यह हमें XPath अभिव्यक्तियों का उपयोग करके विशिष्ट डेटा का पता लगाने और निकालने की अनुमति देता है।
from lxml.html import fromstring
page_content = await fetch_html_content('https link')
parser = fromstring(page_content)
XPath चयनकर्ताओं के साथ, हम प्लेलिस्ट में प्रत्येक ट्रैक के लिए निम्न विवरण एकत्र करते हैं:
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 डोमेन के साथ पूरा किया जाता है।
डेटा इकट्ठा करने के बाद, हम इसे एक 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