
現在、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. 上記テーブルをエクセルのシートへ書き込む方法
ご存知の方、宜しくお願いします。
No.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から直接同様のリクエスト行えば、目的のデータを得ることができるものと考えられます。
ただし、リクエストの内容は、ソースにあるスクリプトを解析しないとわかりませんので、どのような形式になっているのかは不明です。
(丁寧に解析すれば、わかるものとは思いますが・・)
また、仮にリクエストができたとしても、サーバー側がダイレクトなリクエストを拒否するような仕組みになっている可能性がありますので、レスポンスが得られるかどうかも不明ということです。
fujillinさん、URLにリクエストしてからの流れを懇切丁寧に教えて頂き有り難うございました。
以前、「ソースの表示」を見た事はあったのですが、仰るとおり、目的の表の部分はデータとしてはありませんでした。
結局、当該サイトからテーブルのデータを抜き取るのは難しそうなので諦める事としました。
お忙しい所、御親切な指導を感謝いたします。
今後とも、機会があれば宜しくお願い致します。
No.1
- 回答日時:
こんばんは
ご質問のHTTPRequestによる方法は以下のページに紹介されています。
(検索すれば、他にもいろいろ見つかると思います。)
https://qiita.com/asamiKA/items/3944ba300ba53417 …
一方で、上記の方法でご提示のURLにアクセスして得られるのは、あくまでも「ページのソース」に該当する部分です。
ざっと見たところ、取得なさりたい表の内容はajaxで取得しているようですので、ソース上には記載されていないようです。
ですので、直接、表に該当する部分の内容をリクエストするか(=サーバー側がリクエストを受け付けるようになっているかどうかは不明です)、現状のように、ブラウザを介して内容を取得後に、そのDOMから取得する方法になってしまうものと思われます。
fujillinさん、この度も早速の回答、有り難うございました。
ご指摘の「HTTPRequestによる方法」は VBA、スクレイピング、HTTP、テーブル等のキーワードで(多分)100件以上のサイトを参考にしていて、 qiitaさんのサイトも関連する記事の殆んどは拝見しているのですが、小生のレベルでは残念ながら参考になりませんでした。
fujillinさんの云われている「表に該当する部分の内容をリクエストする」は、質問内容にあるXPathでは駄目なのでしょうか。
現在使用しているSeleniumBasic方式ではこれで正常に取り込まれているのですが。
お手数ですが、再びご返事を頂ければ幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBA : スクレイピングできない 4 2023/05/12 22:26
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Access(アクセス) access フォーム 大分類、小分類 1 2022/08/11 18:03
- その他(プログラミング・Web制作) Windowsのマクロプログラムで、こんなことできますか? 3 2022/06/28 14:30
- Visual Basic(VBA) Selenium.ChromeDriverの使い方について 7 2022/09/22 06:43
- その他(プログラミング・Web制作) パイソン。スクレイピング。Chromeドライバーの使い方を教えてください。 1 2023/06/14 21:55
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Excel(エクセル) 【vba】日付の形式が勝手に変わってしまう。 1 2022/09/29 10:54
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「取得先」という表現について
-
EXCEL、マクロ-改ページ行番号...
-
Excel VBA:特定の文字列以降(...
-
コンビニで住民票を取得した場...
-
IPアドレス変更方法
-
VB.NETでボリュームを取得・設...
-
Yahoo! JAPAN IDを新規取得でき...
-
スクレイピングに適した言語を...
-
PHPを使って、別サイトの一部を...
-
VB2005でXMLデータから複数ある...
-
アメブロでテーマを指定したRSS...
-
各クライアントマシンのログイ...
-
ミュージックのアートワークを...
-
PHP の cURL で、htmlを画像へ...
-
IEを使わないでhtmlテキストを...
-
位置センサー動作履歴
-
Win32apiでUSBカメラ映像取得の...
-
format関数について
-
ps3で久しぶりにCDの音楽情報取...
-
APIから取得した情報の文字化け...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「取得先」という表現について
-
コンビニで住民票を取得した場...
-
Yahoo! JAPAN IDを新規取得でき...
-
EXCEL、マクロ-改ページ行番号...
-
Excel VBA:特定の文字列以降(...
-
VBS「開いているページ」のURL...
-
【C#】FindWindowExの使い方を...
-
ps3で久しぶりにCDの音楽情報取...
-
IPアドレスとMACアドレスを取得...
-
ローカルのコンピュータ名を取...
-
VBAでPDFのアクティブページ番...
-
VB.NETでボリュームを取得・設...
-
アメブロでテーマを指定したRSS...
-
DMMの動画を全件取得したのです...
-
(Win32)ファイルパスから物理ド...
-
【VBA】EXCELブックを開かずに...
-
各クライアントマシンのログイ...
-
VB or VBScriptでPCの製造番号...
-
format関数について
-
PHPを使って、別サイトの一部を...
おすすめ情報