یہ گائیڈ یہ ظاہر کرتا ہے کہ درخواستوں اور LXML لائبریریوں کو استعمال کرتے ہوئے ، ازگر کا استعمال کرتے ہوئے یاہو فنانس سے ڈیٹا کو کھرچنے کا طریقہ۔ یاہو فنانس وسیع مالی اعداد و شمار پیش کرتا ہے جیسے اسٹاک کی قیمتوں اور مارکیٹ کے رجحانات ، جو حقیقی وقت کے مارکیٹ تجزیہ ، مالیاتی ماڈلنگ ، اور خودکار سرمایہ کاری کی حکمت عملی تیار کرنے کے لئے اہم ہیں۔
اس طریقہ کار میں ویب پیج کے مواد کو بازیافت کرنے ، موصولہ HTML کی تجزیہ کرنے ، اور XPath کے تاثرات کا استعمال کرتے ہوئے مخصوص ڈیٹا نکالنے کے لئے HTTP کی درخواستیں بھیجنا شامل ہے۔ یہ نقطہ نظر موثر اور ھدف بنائے گئے ڈیٹا نکالنے کے قابل بناتا ہے ، جس سے صارفین کو مالی معلومات تک رسائی اور استعمال کرنے کی اجازت ملتی ہے۔
ہم مندرجہ ذیل ازگر لائبریریوں کا استعمال کریں گے:
شروع کرنے سے پہلے ، یقینی بنائیں کہ آپ کے پاس یہ لائبریریاں انسٹال ہوں:
pip install requests
pip install lxml
ذیل میں ، ہم ایک قدم بہ قدم انداز میں تجزیہ کرنے کے عمل کو تلاش کریں گے ، جس میں واضح اور تفہیم میں آسانی کے لئے کوڈ کی مثالوں کے ساتھ مکمل کیا جائے گا۔
ویب سکریپنگ کا پہلا قدم ہدف URL کو HTTP کی درخواست بھیج رہا ہے۔ ہم یہ کرنے کے لئے درخواستوں کی لائبریری کا استعمال کریں گے۔ ایک حقیقی براؤزر کی نقل کرنے کی درخواست میں مناسب ہیڈر شامل کرنا بہت ضروری ہے ، جو بنیادی اینٹی بوٹ اقدامات کو نظرانداز کرنے میں مدد کرتا ہے۔
import requests
from lxml import html
# Target URL
url = "https://finance.yahoo.com/quote/AMZN/"
# Headers to mimic a real browser
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',
}
# Send the HTTP request
response = requests.get(url, headers=headers)
HTML مواد حاصل کرنے کے بعد ، اگلا مرحلہ XPath کا استعمال کرتے ہوئے مطلوبہ ڈیٹا کو نکالنا ہے۔ ایکس پیتھ ایک XML دستاویز سے نوڈس کے انتخاب کے لئے ایک طاقتور استفسار کی زبان ہے ، جو HTML مواد کی تجزیہ کرنے کے لئے بہترین ہے۔
عنوان اور قیمت:
مزید تفصیلات:
ذیل میں ایکسپاتھ کے تاثرات ہیں جو ہم مالی اعداد و شمار کے مختلف ٹکڑوں کو نکالنے کے لئے استعمال کریں گے:
# Parse the HTML content
parser = html.fromstring(response.content)
# Extracting data using 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 the extracted data
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}")
یاہو فنانس جیسی ویب سائٹیں اکثر خودکار سکریپنگ کو روکنے کے لئے اینٹی بوٹ اقدامات پر کام کرتی ہیں۔ مسدود ہونے سے بچنے کے ل you ، آپ پراکسی استعمال کرسکتے ہیں اور ہیڈر گھوم سکتے ہیں۔
ایک پراکسی سرور آپ کی مشین اور ٹارگٹ ویب سائٹ کے مابین ایک بیچوان کا کام کرتا ہے۔ اس سے آپ کے IP پتے کو نقاب پوش کرنے میں مدد ملتی ہے ، جس سے ویب سائٹوں کا پتہ لگانا مشکل ہوجاتا ہے کہ آپ کھرچ رہے ہیں۔
# Example of using a proxy with IP authorization model
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",
# Add more User-Agent strings here
]
headers["user-agent"]: random.choice(user_agents)
response = requests.get(url, headers=headers)
آخر میں ، آپ بعد میں استعمال کے ل cr کھرچنے والے ڈیٹا کو CSV فائل میں محفوظ کرسکتے ہیں۔ یہ خاص طور پر بڑے ڈیٹاسیٹس کو ذخیرہ کرنے یا آف لائن ڈیٹا کا تجزیہ کرنے کے لئے مفید ہے۔
import csv
# Data to be saved
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]
]
# Save to CSV file
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")
ذیل میں مکمل ازگر اسکرپٹ ہے جو ہم نے ان تمام اقدامات کو مربوط کیا ہے جن پر ہم نے تبادلہ خیال کیا ہے۔ اس میں ہیڈر کے ساتھ درخواستیں بھیجنا ، پراکسیوں کا استعمال کرنا ، ایکس پاتھ کے ساتھ ڈیٹا نکالنا ، اور ڈیٹا کو سی ایس وی فائل میں محفوظ کرنا شامل ہے۔
import requests
from lxml import html
import random
import csv
# Example URL to scrape
url = "https://finance.yahoo.com/quote/AMZN/"
# List of User-Agent strings for rotating headers
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",
# Add more User-Agent strings here
]
# Headers to mimic a real browser
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),
}
# Example of using a proxy
proxies = {
"http": "http://your.proxy.server:port",
"https": "https://your.proxy.server:port"
}
# Send the HTTP request with headers and optional proxies
response = requests.get(url, headers=headers, proxies=proxies)
# Check if the request was successful
if response.status_code == 200:
# Parse the HTML content
parser = html.fromstring(response.content)
# Extract data using 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 the extracted data
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}")
# Save the data to a CSV file
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 لائبریریوں کے ساتھ ساتھ ، مناسب ہیڈر ، پراکسیوں اور اینٹی بوٹ اقدامات کے ساتھ ، آپ تجزیہ کے ل stock اسٹاک کے ڈیٹا کو موثر انداز میں کھرچ سکتے ہیں اور اسٹور کرسکتے ہیں۔ اس گائیڈ نے بنیادی باتوں کا احاطہ کیا ، لیکن ویب سائٹوں کو ختم کرتے وقت قانونی اور اخلاقی رہنما خطوط پر عمل کرنا یاد رکھیں۔
تبصرے: 0