dポイントプレゼントキャンペーン実施中!

現在、WebでのスクレイピングをChromeとSeleniumBasic(VBA)との組み合わせで行っています。
 これをHTTP通信で行えばデータの取得速度が格段に上がるとの事なのでいろいろ調べたのですが、末尾に示したような要求を満たすマクロは見当たりませんでした。
 因みに現在はVBAで(詳細は省略)、
Driver.Get ("https://www.oddsportal.com/soccer/belgium/jupile …
Driver.FindElementByXPath("//*[@id=""tournamentTable""]/tbody").AsTable().ToExcel (Worksheets("表1").Cells(1, 1))
のように記述して正常にテーブル(tournamentTable)を取得しています。
 目的のサイトのURLは上記のとおりですが、この頁の中央にある上記テーブル(日時、チーム名、得点、オッズが含まれている)をHTTP通信、または類似の方法で取り込みたいと思っています。
 希望としては以下のようになります。
1. elementを選択しての上記テーブルの取り込み
2. 上記テーブルをエクセルのシートへ書き込む方法

 ご存知の方、宜しくお願いします。

A 回答 (2件)

No1です



ごく一般的なページであれば、URLにリクエストして返されるソース内に目的の情報が含まれているので、必要な部分を取得すれば良いのですが、ご質問のページはそのような仕組みとは異なっているようです。
現状の、Seleniumでの処理の手順を大雑把に記述してみると・・
1)ブラウザにURLを指定して読み込ませる
 (サーバからソースが返される)
 1-1)ブラウザがソースを解釈
 1-2)ソース内のスクリプトに従って、表部分のデータをリクエスト
   (サーバから表部分の内容が返される)
 1-3)返されたデータを解釈して、表部分を表示
2)ブラウザの表示内容(DOM)から表部分の情報を取得
となると思います。

No1に記した内容を、少し詳しく書くなら・・
現在VBAで記述しているのは1)と2)の部分のみと思いますが、1-1)~1-3)のリクエストと解釈はブラウザが行っています。
>質問内容にあるXPathでは駄目なのでしょうか。
これは、上記の2)に相当します。

仮にブラウザを介さずに1)の処理をVBAで直接行った際に取得できるのは、ソースに該当する内容です。
(ブラウザで表示して、「ソースの表示」を行ってみれば、当該の表の部分は無いことがわかると思います。)
ですので、ソースの内容をいくら探しても目的の情報は得られないという事になります。

お求めの内容はソースではなく、1-2)で返されるデータ内に含まれていると考えられますので、VBAから直接同様のリクエスト行えば、目的のデータを得ることができるものと考えられます。
ただし、リクエストの内容は、ソースにあるスクリプトを解析しないとわかりませんので、どのような形式になっているのかは不明です。
(丁寧に解析すれば、わかるものとは思いますが・・)
また、仮にリクエストができたとしても、サーバー側がダイレクトなリクエストを拒否するような仕組みになっている可能性がありますので、レスポンスが得られるかどうかも不明ということです。
    • good
    • 0
この回答へのお礼

fujillinさん、URLにリクエストしてからの流れを懇切丁寧に教えて頂き有り難うございました。
 以前、「ソースの表示」を見た事はあったのですが、仰るとおり、目的の表の部分はデータとしてはありませんでした。
 結局、当該サイトからテーブルのデータを抜き取るのは難しそうなので諦める事としました。
 お忙しい所、御親切な指導を感謝いたします。
 今後とも、機会があれば宜しくお願い致します。

お礼日時:2021/12/29 14:00

こんばんは



ご質問のHTTPRequestによる方法は以下のページに紹介されています。
(検索すれば、他にもいろいろ見つかると思います。)
https://qiita.com/asamiKA/items/3944ba300ba53417 …

一方で、上記の方法でご提示のURLにアクセスして得られるのは、あくまでも「ページのソース」に該当する部分です。
ざっと見たところ、取得なさりたい表の内容はajaxで取得しているようですので、ソース上には記載されていないようです。

ですので、直接、表に該当する部分の内容をリクエストするか(=サーバー側がリクエストを受け付けるようになっているかどうかは不明です)、現状のように、ブラウザを介して内容を取得後に、そのDOMから取得する方法になってしまうものと思われます。
    • good
    • 0
この回答へのお礼

fujillinさん、この度も早速の回答、有り難うございました。
 ご指摘の「HTTPRequestによる方法」は VBA、スクレイピング、HTTP、テーブル等のキーワードで(多分)100件以上のサイトを参考にしていて、 qiitaさんのサイトも関連する記事の殆んどは拝見しているのですが、小生のレベルでは残念ながら参考になりませんでした。
 fujillinさんの云われている「表に該当する部分の内容をリクエストする」は、質問内容にあるXPathでは駄目なのでしょうか。
 現在使用しているSeleniumBasic方式ではこれで正常に取り込まれているのですが。
 
 お手数ですが、再びご返事を頂ければ幸いです。

お礼日時:2021/12/29 09:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A