यह गाइड प्रदर्शित करता है कि पायथन का उपयोग करके याहू फाइनेंस से डेटा को कैसे परिमार्जन किया जाए, अनुरोधों और LXML पुस्तकालयों को नियोजित किया। याहू फाइनेंस व्यापक वित्तीय डेटा जैसे स्टॉक की कीमतें और बाजार के रुझान प्रदान करता है, जो वास्तविक समय के बाजार विश्लेषण, वित्तीय मॉडलिंग और स्वचालित निवेश रणनीतियों को तैयार करने के लिए महत्वपूर्ण हैं।
यह प्रक्रिया वेबपेज सामग्री को पुनः प्राप्त करने के लिए HTTP अनुरोध भेजने, प्राप्त HTML को पार्स करने और XPath अभिव्यक्तियों का उपयोग करके विशिष्ट डेटा निकालने के लिए मजबूर करती है। यह दृष्टिकोण कुशल और लक्षित डेटा निष्कर्षण को सक्षम करता है, जिससे उपयोगकर्ता गतिशील रूप से वित्तीय जानकारी का उपयोग और उपयोग कर सकते हैं।
हम निम्नलिखित पायथन पुस्तकालयों का उपयोग करेंगे:
शुरू करने से पहले, सुनिश्चित करें कि आपके पास ये पुस्तकालय स्थापित हैं:
pip install requests
pip install lxml
नीचे, हम स्पष्टता और समझ में आसानी के लिए कोड उदाहरणों के साथ, चरण-दर-चरण तरीके से पार्सिंग प्रक्रिया का पता लगाएंगे।
वेब स्क्रैपिंग में पहला कदम लक्ष्य URL को HTTP अनुरोध भेज रहा है। हम ऐसा करने के लिए अनुरोध लाइब्रेरी का उपयोग करेंगे। एक वास्तविक ब्राउज़र की नकल करने के अनुरोध में उचित हेडर को शामिल करना महत्वपूर्ण है, जो बुनियादी एंटी-बॉट उपायों को दरकिनार करने में मदद करता है।
import requests
from lxml import html
# लक्ष्य URL
url = "https://finance.yahoo.com/quote/AMZN/"
# एक वास्तविक ब्राउज़र की नकल करने के लिए हेडर
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',
}
# HTTP अनुरोध भेजें
response = requests.get(url, headers=headers)
HTML सामग्री प्राप्त करने के बाद, अगला चरण XPATH का उपयोग करके वांछित डेटा निकालना है। XPath एक XML दस्तावेज़ से नोड्स का चयन करने के लिए एक शक्तिशाली क्वेरी भाषा है, जो HTML सामग्री को पार्स करने के लिए एकदम सही है।
शीर्षक और मूल्य :
अधिक जानकारी:
नीचे दिए गए XPath अभिव्यक्तियाँ हैं जिनका उपयोग हम वित्तीय डेटा के विभिन्न टुकड़ों को निकालने के लिए करते हैं:
# HTML सामग्री को पार्स करें
parser = html.fromstring(response.content)
# XPATH का उपयोग करके डेटा निकालना
title = ' '.join(parser.xpath('//h1[@class="yf-3a2v0c"]/text()'))
live_price = parser.xpath('//fin-streamer[@class="livePrice yf-mgkamr"]/span/text()')[0]
date_time = parser.xpath('//div[@slot="marketTimeNotice"]/span/text()')[0]
open_price = parser.xpath('//ul[@class="yf-tx3nkj"]/li[2]/span[2]/fin-streamer/text()')[0]
previous_close = parser.xpath('//ul[@class="yf-tx3nkj"]/li[1]/span[2]/fin-streamer/text()')[0]
days_range = parser.xpath('//ul[@class="yf-tx3nkj"]/li[5]/span[2]/fin-streamer/text()')[0]
week_52_range = parser.xpath('//ul[@class="yf-tx3nkj"]/li[6]/span[2]/fin-streamer/text()')[0]
volume = parser.xpath('//ul[@class="yf-tx3nkj"]/li[7]/span[2]/fin-streamer/text()')[0]
avg_volume = parser.xpath('//ul[@class="yf-tx3nkj"]/li[8]/span[2]/fin-streamer/text()')[0]
# निकाले गए डेटा को प्रिंट करें
print(f"Title: {title}")
print(f"Live Price: {live_price}")
print(f"Date & Time: {date_time}")
print(f"Open Price: {open_price}")
print(f"Previous Close: {previous_close}")
print(f"Day's Range: {days_range}")
print(f"52 Week Range: {week_52_range}")
print(f"Volume: {volume}")
print(f"Avg. Volume: {avg_volume}")
याहू फाइनेंस जैसी वेबसाइटें अक्सर स्वचालित स्क्रैपिंग को रोकने के लिए एंटी-बॉट उपायों को नियुक्त करती हैं। अवरुद्ध होने से बचने के लिए, आप प्रॉक्सी का उपयोग कर सकते हैं और हेडर को घुमा सकते हैं।
एक प्रॉक्सी सर्वर आपकी मशीन और लक्ष्य वेबसाइट के बीच एक मध्यस्थ के रूप में कार्य करता है। यह आपके आईपी पते को मास्क करने में मदद करता है, जिससे वेबसाइटों के लिए यह पता लगाना कठिन हो जाता है कि आप स्क्रैप कर रहे हैं।
# आईपी प्राधिकरण मॉडल के साथ एक प्रॉक्सी का उपयोग करने का उदाहरण
proxies = {
"http": "http://your.proxy.server:port",
"https": "https://your.proxy.server:port"
}
response = requests.get(url, headers=headers, proxies=proxies)
उपयोगकर्ता-एजेंट हेडर को घुमाना पता लगाने से बचने का एक और प्रभावी तरीका है। आप सामान्य उपयोगकर्ता-एजेंट स्ट्रिंग्स की एक सूची का उपयोग कर सकते हैं और प्रत्येक अनुरोध के लिए यादृच्छिक रूप से एक का चयन कर सकते हैं।
import random
user_agents = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0",
# यहां अधिक उपयोगकर्ता-एजेंट तार जोड़ें
]
headers["user-agent"]: random.choice(user_agents)
response = requests.get(url, headers=headers)
अंत में, आप बाद में उपयोग के लिए CSV फ़ाइल में स्क्रैप किए गए डेटा को सहेज सकते हैं। यह विशेष रूप से बड़े डेटासेट को संग्रहीत करने या डेटा का विश्लेषण करने के लिए उपयोगी है।
import csv
# सहेजे जाने के लिए डेटा
data = [
["URL", "Title", "Live Price", "Date & Time", "Open Price", "Previous Close", "Day's Range", "52 Week Range", "Volume", "Avg. Volume"],
[url, title, live_price, date_time, open_price, previous_close, days_range, week_52_range, volume, avg_volume]
]
# CSV फ़ाइल में सहेजें
with open("yahoo_finance_data.csv", "w", newline="") as file:
writer = csv.writer(file)
writer.writerows(data)
print("Data saved to yahoo_finance_data.csv")
नीचे संपूर्ण पायथन स्क्रिप्ट है जो हमारे द्वारा चर्चा की गई सभी चरणों को एकीकृत करती है। इसमें हेडर के साथ अनुरोध भेजना, प्रॉक्सी का उपयोग करना, XPATH के साथ डेटा निकालना, और डेटा को CSV फ़ाइल में सहेजना शामिल है।
import requests
from lxml import html
import random
import csv
# उदाहरण URL को खुरचने के लिए
url = "https://finance.yahoo.com/quote/AMZN/"
# हेडर को घूर्णन के लिए उपयोगकर्ता-एजेंट स्ट्रिंग्स की सूची
user_agents = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0",
# यहां अधिक उपयोगकर्ता-एजेंट तार जोड़ें
]
# एक वास्तविक ब्राउज़र की नकल करने के लिए हेडर
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': random.choice(user_agents),
}
# एक प्रॉक्सी का उपयोग करने का उदाहरण
proxies = {
"http": "http://your.proxy.server:port",
"https": "https://your.proxy.server:port"
}
# हेडर और वैकल्पिक प्रॉक्सी के साथ HTTP अनुरोध भेजें
response = requests.get(url, headers=headers, proxies=proxies)
# जाँच करें कि क्या अनुरोध सफल था
if response.status_code == 200:
# HTML सामग्री को पार्स करें
parser = html.fromstring(response.content)
# XPath का उपयोग करके डेटा निकालें
title = ' '.join(parser.xpath('//h1[@class="yf-3a2v0c"]/text()'))
live_price = parser.xpath('//fin-streamer[@class="livePrice yf-mgkamr"]/span/text()')[0]
date_time = parser.xpath('//div[@slot="marketTimeNotice"]/span/text()')[0]
open_price = parser.xpath('//ul[@class="yf-tx3nkj"]/li[2]/span[2]/fin-streamer/text()')[0]
previous_close = parser.xpath('//ul[@class="yf-tx3nkj"]/li[1]/span[2]/fin-streamer/text()')[0]
days_range = parser.xpath('//ul[@class="yf-tx3nkj"]/li[5]/span[2]/fin-streamer/text()')[0]
week_52_range = parser.xpath('//ul[@class="yf-tx3nkj"]/li[6]/span[2]/fin-streamer/text()')[0]
volume = parser.xpath('//ul[@class="yf-tx3nkj"]/li[7]/span[2]/fin-streamer/text()')[0]
avg_volume = parser.xpath('//ul[@class="yf-tx3nkj"]/li[8]/span[2]/fin-streamer/text()')[0]
# निकाले गए डेटा को प्रिंट करें
print(f"Title: {title}")
print(f"Live Price: {live_price}")
print(f"Date & Time: {date_time}")
print(f"Open Price: {open_price}")
print(f"Previous Close: {previous_close}")
print(f"Day's Range: {days_range}")
print(f"52 Week Range: {week_52_range}")
print(f"Volume: {volume}")
print(f"Avg. Volume: {avg_volume}")
# डेटा को CSV फ़ाइल में सहेजें
data = [
["URL", "Title", "Live Price", "Date & Time", "Open Price", "Previous Close", "Day's Range", "52 Week Range", "Volume", "Avg. Volume"],
[url, title, live_price, date_time, open_price, previous_close, days_range, week_52_range, volume, avg_volume]
]
with open("yahoo_finance_data.csv", "w", newline="") as file:
writer = csv.writer(file)
writer.writerows(data)
print("Data saved to yahoo_finance_data.csv")
else:
print(f"Failed to retrieve data. Status code: {response.status_code}")
पायथन का उपयोग करके याहू वित्त डेटा को स्क्रैप करना वित्तीय डेटा के संग्रह को स्वचालित करने का एक शक्तिशाली तरीका है। अनुरोधों और LXML पुस्तकालयों का उपयोग करके, उचित हेडर, प्रॉक्सी और एंटी-बॉट उपायों के साथ, आप विश्लेषण के लिए स्टॉक डेटा को कुशलता से और स्टोर कर सकते हैं। इस गाइड ने मूल बातें कवर कीं, लेकिन वेबसाइटों को स्क्रैप करते समय कानूनी और नैतिक दिशानिर्देशों का पालन करना याद रखें।
टिप्पणियाँ: 0