কম্পিউটার

পাইথনে lxml ব্যবহার করে ওয়েব স্ক্র্যাপিং বাস্তবায়ন করছেন?


ওয়েব স্ক্র্যাপিং শুধুমাত্র ডেটা বিজ্ঞান উত্সাহীদেরই উত্তেজিত করে না বরং শিক্ষার্থী বা একজন শিক্ষার্থীকে, যারা ওয়েবসাইটগুলির গভীরে খনন করতে চায়। পাইথন,

সহ অনেক ওয়েবস্ক্র্যাপিং লাইব্রেরি প্রদান করে
  • স্ক্র্যাপি

  • Urllib

  • সুন্দর স্যুপ

  • সেলেনিয়াম

  • পাইথন অনুরোধ

  • LXML

আমরা একটি ওয়েবপেজ থেকে ডেটা স্ক্র্যাপ করার জন্য পাইথনের lxml লাইব্রেরি নিয়ে আলোচনা করব, যা C তে লেখা libxml2 XML পার্সিং লাইব্রেরির উপরে তৈরি করা হয়েছে, যা এটিকে Beautiful Soup-এর চেয়ে দ্রুততর করতে সাহায্য করে কিন্তু কিছু কম্পিউটারে ইনস্টল করা কঠিন, বিশেষ করে Windows .

lxml ইনস্টল এবং আমদানি করা হচ্ছে

lxml কমান্ড লাইন থেকে পিপ ব্যবহার করে ইনস্টল করা যেতে পারে,

pip install lxml

অথবা

conda install -c anaconda lxml

lxml ইনস্টলেশন সম্পূর্ণ হলে, html মডিউল আমদানি করুন, যা lxml থেকে HTML পার্স করে।

>>> from lxml import html

আপনি যে পৃষ্ঠাটি স্ক্র্যাপ করতে চান তার সোর্স কোডটি পুনরুদ্ধার করুন- আমাদের কাছে দুটি পছন্দ আছে হয় আমরা পাইথন অনুরোধ লাইব্রেরি বা urllib ব্যবহার করতে পারি এবং পৃষ্ঠার সম্পূর্ণ HTML ধারণকারী একটি lxml HTML উপাদান অবজেক্ট তৈরি করতে এটি ব্যবহার করতে পারি। আমরা পৃষ্ঠার HTML সামগ্রী ডাউনলোড করতে অনুরোধ লাইব্রেরি ব্যবহার করতে যাচ্ছি৷

পাইথন অনুরোধগুলি ইনস্টল করতে, আপনার পছন্দের টার্মিনালে এই সাধারণ কমান্ডটি চালান -

$ pipenv install requests

ইয়াহু ফাইন্যান্স থেকে ডেটা স্ক্র্যাপ করা

ধরা যাক আমরা google.finance বা yahoo.finance থেকে স্টক/ইকুইটি ডেটা স্ক্র্যাপ করতে চাই। নিচে yahoo ফাইনান্স থেকে Microsoft কর্পোরেশনের স্ক্রিনশট দেওয়া হল,

পাইথনে lxml ব্যবহার করে ওয়েব স্ক্র্যাপিং বাস্তবায়ন করছেন?

তাই উপরে থেকে (https://finance.yahoo.com/quote/msft ), আমরা স্টকের সমস্ত ক্ষেত্র এক্সট্রাক্ট করতে যাচ্ছি যা উপরে দেখা যাচ্ছে,

  • পূর্ববর্তী বন্ধ, খোলা, বিড, জিজ্ঞাসা, দিনের পরিসীমা, 52 সপ্তাহের পরিসর, ভলিউম এবং আরও অনেক কিছু৷

python lxml মডিউল −

ব্যবহার করে এটি সম্পন্ন করার জন্য নীচে কোড দেওয়া হল

lxml_scrape3.py

from lxml import html
import requests
from time import sleep
import json
import argparse
from collections import OrderedDict
from time import sleep

def parse(ticker):
   url = "https://finance.yahoo.com/quote/%s?p=%s"%(ticker,ticker)
   response = requests.get(url, verify = False)
   print ("Parsing %s"%(url))
   sleep(4)
   parser = html.fromstring(response.text)
   summary_table = parser.xpath('//div[contains(@data-test,"summary-table")]//tr')
   summary_data = OrderedDict()
   other_details_json_link = "https://query2.finance.yahoo.com/v10/finance/quoteSummary/{0}? formatted=true&lang=en- 
   US&region=US&modules=summaryProfile%2CfinancialData%2CrecommendationTrend%2
   CupgradeDowngradeHistory%2Cearnings%2CdefaultKeyStatistics%2CcalendarEvents&
corsDomain=finance.yahoo.com".format(ticker)summary_json_response=requests.get(other_details_json_link)
   try:
      json_loaded_summary = json.loads(summary_json_response.text)
      y_Target_Est = json_loaded_summary["quoteSummary"]["result"][0]["financialData"] ["targetMeanPrice"]['raw']
      earnings_list = json_loaded_summary["quoteSummary"]["result"][0]["calendarEvents"]['earnings']
      eps = json_loaded_summary["quoteSummary"]["result"][0]["defaultKeyStatistics"]["trailingEps"]['raw']

      datelist = []
      for i in earnings_list['earningsDate']:
         datelist.append(i['fmt'])
      earnings_date = ' to '.join(datelist)
      for table_data in summary_table:
         raw_table_key = table_data.xpath('.//td[contains(@class,"C(black)")]//text()')
         raw_table_value = table_data.xpath('.//td[contains(@class,"Ta(end)")]//text()')
         table_key = ''.join(raw_table_key).strip()
         table_value = ''.join(raw_table_value).strip()
         summary_data.update({table_key:table_value})
      summary_data.update({'1y Target Est':y_Target_Est,'EPS (TTM)':eps,'Earnings  Date':earnings_date,'ticker':ticker,'url':url})
      return summary_data
   except:
      print ("Failed to parse json response")
      return {"error":"Failed to parse json response"}

if __name__=="__main__":
   argparser = argparse.ArgumentParser()
   argparser.add_argument('ticker',help = '')
   args = argparser.parse_args()
   ticker = args.ticker
   print ("Fetching data for %s"%(ticker))
   scraped_data = parse(ticker)
   print ("Writing data to output file")
   with open('%s-summary.json'%(ticker),'w') as fp:
      json.dump(scraped_data,fp,indent = 4)

উপরের কোডটি চালানোর জন্য, আপনার কমান্ড টার্মিনালে নীচে সহজ টাইপ করুন -

c:\Python\Python361>python lxml_scrape3.py MSFT

lxml_scrap3.py চালানোর সময় আপনি দেখতে পাবেন, আপনার বর্তমান কাজের ডিরেক্টরিতে একটি .json ফাইল তৈরি করা হয়েছে "stockName-summary.json" এর মতো কিছু নামকরণ করা হয়েছে কারণ আমি ইয়াহু ফিনান্স থেকে msft(microsoft) ক্ষেত্রগুলি বের করার চেষ্টা করছি, তাই একটি ফাইল − "msft-summary.json" নামে তৈরি।

নিচে উত্পন্ন আউটপুট −

এর স্ক্রিনশট আছে

পাইথনে lxml ব্যবহার করে ওয়েব স্ক্র্যাপিং বাস্তবায়ন করছেন?

তাই আমরা সফলভাবে lxml এবং অনুরোধগুলি ব্যবহার করে মাইক্রোসফ্টের yahoo.finance থেকে সমস্ত প্রয়োজনীয় ডেটা স্ক্র্যাপ করেছি এবং তারপরে একটি ফাইলে ডেটা সংরক্ষণ করেছি যা পরে মাইক্রোসফ্ট স্টকের দামের গতিবিধি শেয়ার বা বিশ্লেষণ করতে ব্যবহার করা যেতে পারে৷


  1. পাইথন এবং স্ক্র্যাপি ব্যবহার করে ওয়েব স্ক্র্যাপিং?

  2. পাইথনে ফটোমোজাইক প্রয়োগ করা

  3. পাইথনে CX_Freeze ব্যবহার করা

  4. ওয়েব স্ক্র্যাপিংয়ের জন্য পাইথন সরঞ্জাম