Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでlxmlを使用してWebスクレイピングを実装しますか?


Webスクレイピングは、データサイエンスの愛好家だけでなく、Webサイトをより深く掘り下げたい学生や学習者を興奮させます。 Pythonは、次のような多くのWebスクレイピングライブラリを提供しています。

  • Scrapy

  • Urllib

  • BeautifulSoup

  • セレン

  • Pythonリクエスト

  • LXML

Cで記述されたlibxml2XML解析ライブラリの上に構築されたWebページからデータを取得するPythonのlxmlライブラリについて説明します。これにより、Beautiful Soupよりも高速になりますが、一部のコンピューター、特にWindowsへのインストールが困難になります。 。

lxmlのインストールとインポート

lxmlは、pipを使用してコマンドラインからインストールできます

pip install lxml

または

conda install -c anaconda lxml

lxmlのインストールが完了したら、lxmlからHTMLを解析するhtmlモジュールをインポートします。

>>> from lxml import html

スクレイプするページのソースコードを取得します。Pythonリクエストライブラリまたはurllibを使用して、ページのHTML全体を含むlxmlHTML要素オブジェクトを作成するという2つの選択肢があります。リクエストライブラリを使用して、ページのHTMLコンテンツをダウンロードします。

Pythonリクエストをインストールするには、選択した端末でこの簡単なコマンドを実行するだけです-

$ pipenv install requests

yahooファイナンスからのデータのスクレイピング

google.financeまたはyahoo.financeから株式/株式データを取得したいとします。以下は、yahooFinanceのMicrosoft企業のスクリーンショットです。

Pythonでlxmlを使用してWebスクレイピングを実装しますか?

上から( https://finance.yahoo.com/quote/msft )、上に表示されている株式のすべてのフィールドを抽出します。

  • 前のクローズ、オープン、ビッド、アスク、日のレンジ、52週間のレンジ、ボリュームなど。

以下は、pythonlxmlモジュールを使用してこれを実現するためのコードです-

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を実行すると、yahoo Financeからmsft(microsoft)フィールドを抽出しようとしているため、現在の作業ディレクトリに「stockName-summary.json」のような名前の.jsonファイルが作成されます。名前で作成-「msft-summary.json」。

以下は、生成された出力のスクリーンショットです-

Pythonでlxmlを使用してWebスクレイピングを実装しますか?

そのため、lxmlとrequestsを使用してMicrosoftのyahoo.financeから必要なすべてのデータを正常に取得し、データをファイルに保存します。このファイルは、後でMicrosoft株の価格変動を共有または分析するために使用できます。


  1. PythonでのCX_Freezeの使用

    時々私たちは非常にエキサイティングな何か違うものを作りたいと感じます、そして人間の性質によれば、私たちはいつもそれを共有するのが大好きです。 Pythonもそれらの願いを満たします。 Pythonを使用して、Pythonプログラムを友人と共有したい場合は、それを行うことができます。必要なのは、マシンのプログラムで使用されるすべてのモジュールに同じバージョンのPythonをインストールすることだけです。 まず、 pip install CX_Frezzeを使用してCX_Freezeモジュールをインストールする必要があります コマンドプロンプトのコマンド。 最初のステップは、この割り当て、

  2. Webスクレイピング用のPythonツール

    コンピュータサイエンスでは、WebスクレイピングとはWebサイトからデータを抽出することを意味します。この手法を使用すると、ウェブ上の非構造化データが構造化データに変換されます。 Python3で最も一般的なWebスクレイピングツールは-です。 Urllib2 リクエスト BeautifulSoup Lxml セレン MechanicalSoup Urllib2 −このツールにはPythonがプリインストールされています。このモジュールは、URLを抽出するために使用されます。さまざまなプロトコル(FTP、HTTPなど)を使用してURLをフェッチするurlopen()