質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

2回答

700閲覧

フロントコントローラーのサイトをスクレイピングしたい

codetaisei

総合スコア23

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

1クリップ

投稿2017/09/21 08:07

http://hoge.com/index.php //遷移前

submit

http://hoge.com/index.php //遷移後 ⇐このページをスクレイピングしたい

最初VBAでスクレイピングしたのですが、遷移前のページしか取得できませんでした。
ちなみに、こんなかんじです。(参考にしたサイト→https://www.vba-ie.net/ie/subroutine2.html)

VBA

1Sub test() 2 3 Dim objIE As InternetExplorer 4 5 '指定URLを表示するサブルーチン「ieView」 6 Call ieView(objIE, "http://hoge.com/index.php") 7 8 'Webページ完全読込待機処理サブルーチン「ieCheck」 9 Call ieCheck(objIE) 10 11 'submitする 12 objIE.document.getElementsByTagName("submit")(0).Click 13 14 Call ieCheck(objIE) 15 16 ~ここからスクレイピング~ 17 18End Sub 19------------------------------------------------------------------ 20#If VBA7 Then 21 Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As LongPtr) 22#Else 23 Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long) 24#End If 25------------------------------------------------------------------ 26Sub ieCheck(objIE As InternetExplorer) 27 28 Dim timeOut As Date 29 30 '完全にページが表示されるまで待機する 31 timeOut = Now + TimeSerial(0, 0, 20) 32 33 Do While objIE.Busy = True Or objIE.ReadyState <> 4 34 DoEvents 35 Sleep 1 36 If Now > timeOut Then 37 objIE.Refresh 38 timeOut = Now + TimeSerial(0, 0, 20) 39 End If 40 Loop 41 42 timeOut = Now + TimeSerial(0, 0, 20) 43 44 Do While objIE.document.ReadyState <> "complete" 45 DoEvents 46 Sleep 1 47 If Now > timeOut Then 48 objIE.Refresh 49 timeOut = Now + TimeSerial(0, 0, 20) 50 End If 51 Loop 52 53End Sub 54------------------------------------------------------------------ 55Sub ieView(objIE As InternetExplorer, _ 56 urlName As String, _ 57 Optional viewFlg As Boolean = True) 58 59 'IE(InternetExplorer)のオブジェクトを作成する 60 Set objIE = CreateObject("InternetExplorer.Application") 61 62 'IE(InternetExplorer)を表示・非表示 63 objIE.Visible = viewFlg 64 65 '指定したURLのページを表示する 66 objIE.Navigate urlName 67 68 'IE(InternetExplorer)が完全表示されるまで待機 69 Call ieCheck(objIE) 70 71End Sub 72Sub sample() 73 74 Dim objIE As InternetExplorer 75 Dim url As String 76 url = Range("A1").Value 77 Call ieView(objIE, url) 78 Call ieCheck(objIE) 79 objIE.document.getElementsByName("method_free")(0).Click 80 81 Sleep 1000 82 Call ieCheck(objIE) 83 84 'MsgBox objIE.document.getElementsByClassName("rightcol")(0).Click 85 Debug.Print objIE.document.body.outerHTML 86 87End Sub

一応ほかの言語でも試してみたいのですが、どの言語でどのようにすればいいかも教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

IEのバージョンは11でしょうか。

submit直後後に以下を追加すると遷移後のページをスクレイピングできる場合があります。

'submitする
objIE.document.getElementsByTagName("submit")(0).Click

DoEvents Sleep 2000

投稿2017/09/23 14:02

TanakaHiroaki

総合スコア1063

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Java(言語)を使用してSelenium(ブラウザを自動で操作するツール)を使用するのが、ベターかと思います。
お仕事でも使える技術という意味では非常におすすめです。
但し往々にしてこの方法は学習コストが高く諦める方が一定数いらっしゃるようです。

そこで、もう1つおすすめを記載します。
iMacrosというFireFoxやChromeのアドオンとして提供されているツールです。
この方法はお仕事では使いづらいかもしれませんが、物凄く簡単にスクレイピングできるのでおすすめです。

投稿2017/09/21 15:31

yamashita_yuich

総合スコア316

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問