グーグルシートにおけるウェブスクレーピング(パーソナルファイナンス)


TL使用:博士IMPORTHTML() and IMPORTXML() webscrape :)
TOC :
  • Bob's Your Uncle

  • My Solution
  • Scraping for yield

  • Scraping for dividend ($)
  • References
  • あなたはGoogleシートを使用してwebscrapeを知ることができましたか?私もそうではありませんが、2022年であり、私たちには、多くの新しいランダムなものを学ぶために、今年9ヶ月があります.

    ボブのおじさん


    私は個人的な金融について読書を楽しみます、そして、私がTWAcanのボブである記事を読むことを楽しむ1人のそのような人.COM .彼はpost 彼が使う方法を詳述することIMPORTHTML() and IMPORTXML() Googleファイナンスとヤフーファイナンスから配当データを削る.これは、ビルトイン以来、本当に便利ですGOOGLEFINANCE() 関数はこの情報を持っていない.
    私は、彼が持っていたものを修正して、また、約XPath and XQuery .
    ここでは、彼が配当を得て、Yahoo金融から情報を得るために使う細胞機能の1つの例です:
    =SPLIT(INDEX(IMPORTHTML(concatenate("https://finance.yahoo.com/quote/",B2),"table",2),6,2)," ")
    
    使用IMPORTHTML() あなただけのスクレーピングの選択を得る"table" or "list" .
    上の例ではB2 ストック・ティッカー・シンボルRYurl 我々がこすりたいページに.我々は、取得を終了2 ページのndテーブルIMPORTHTML() . シートは私たちのために非常に有用ではないテーブルをインポートするので、我々はさらにテーブルを使用して解析を終了しますINDEX() 我々が欲しい正確な細胞を得るために.この場合、配当利回り情報は第6行であり、インデックスは2から始まる1 . それは配当と収益を返しますSPLIT() その情報.
    あなたはボブの記事をチェックアウトする場合は、常に彼の公式を更新する必要があることがわかりますGoogleファイナンスとヤフーファイナンスは、レイアウトを更新し続ける.また、IMPORTXML() ページがダイナミックであり、通常その情報を静的に利用できないので、ある時点で.

    マイソリューション


    私は配当と収量のための他の情報源を見つけることを決めたdividend history . 良いのは、このソースはまた、GoogleとYahoo金融の場合ではないETFSの配当と収量情報を持っていることです.レイアウトがどれくらい頻繁に更新されるかについて、私はわかりません、しかし、それがどれくらい単純であるか、そして、それが一つの目的にどのように役立つかを与えられて、私はそれがあまりにしばしば更新されないと仮定します.

    歩留り


    =INDEX(SPLIT(IMPORTXML("https://dividendhistory.org/payout/"&IF($B2="NASDAQ", "", "TSX/")&$A2, "//p[contains(text(), 'Yield')]", "en_US"), ":%"), 1, 2)
    
    私のユースケースでは、コラムAのティッカーシンボルとコラムBでの交換を続けるのが好きですpayout/TSX/<tickersymbol> アメリカの株はpayout/<tickersymbol> . 私も使用しないCONCATENATE() そして、ちょうど使用を好む"<string>"&A1&"<string>" .
    2番目の引数IMPORTXML()xquery_path .
    //p[contains(text(), 'Yield')]
    
    ありがたいことのHTMLは基本的には非常に具体的なXMLアミライですか?とにかく、クエリを探す<p> テキスト値'Yield' タグの間に.
    Yield: 1.23%
    
    そして、私は数Iが欲しいのでSPLIT(): and % そして、2番目の要素を取ります(シートで覚えているように、インデックスは1から始まります).

    配当金の払い戻し


    =INDEX(IMPORTHTML("https://dividendhistory.org/payout/"&IF($B2="NASDAQ", "", "TSX/")&$A2, "table", 2, "us_EN"), 4, 3)
    
    私が利用できるので、配当はより簡単ですIMPORTHTML() を選択し、2 ページのND表.
    一部のティッカーがニュースやアナウンスを持っていないので、これは完璧ではありませんVGRO :

    この場合、配当履歴テーブルは実際には1 ページ上のSTテーブル.私たちは、Aを探しているので、私たちはリファレンスエラーで終わります2 NDテーブルが存在しません(境界切れ).
    #REF
    
    この問題に対する私の最初の解決策は、おそらくすべてのETFまたはReturnでもありませんTYPE 投資と選択の1 or 2 したがって.これは誤った仮定であることがわかった.
    私の第二の解決策はIMPORTHTML() リクエストISERR(<request>) 次に、1 STテーブル.
    =IF(ISERR(G2),INDEX(IMPORTHTML("https://dividendhistory.org/payout/"&IF($B2="NASDAQ", "", "TSX/")&$A2, "table", 1, "us_EN"), 4, 3), G2)
    
    これは、単一の値の2つの要求を作ることを意味するので、本当に非効率です.最初のリクエストを列に保存しましたG そして"test "列と呼びます.

    とにかく、それは楽しい小さいウサギ穴でした、そして、私は個人的な金融を含むかもしれないか、持たないかもしれないシートの上でウェブスクレーピングのために多くの用途を見つけます!

    参考文献


    https://www.tawcan.com/using-google-spreadsheet-dividend-investment/#Even_Newer_Formula1
    https://support.google.com/docs/answer/3093281?hl=en
    https://www.w3schools.com/xml/xpath_syntax.asp