当サイトは全て記事に広告を含みます。 Twitterで@setusokuをフォローする

食べログ評価一括検索ツール「食べログスクレイピングbot」をUWSCで作ってみた。

スポンサーリンク


食べログ評価一括検索ツール「食べログスクレイピングbot」をUWSCで作ってみた。

※このページは割りと需要のないbotの情報がかかれています。

先日公開したジェフグルメカードが使えるマップ、通称ジェフマップですが、管理人個人的には結構便利で、
ジェフグルメカードの消費が捗ることこの上ないのですが、「そや、ここに食べログ情報を表示できたらエエやん」
と思いたち、食べログの評価情報(のみ)を自動で取得するスクリプトを作ってみました。

目次

用途:

・店名一覧から食べログの店舗ごとの「評価: 3.6 – ‎36 票 – ‎価格帯: ¥3,000~¥3,999」を
抜き出すことが出来ます。

・例えば商店街などの店舗一覧のエクセルファイルがある時に、食べログ評価を可視化するのに
役に立ちます。

・自分の住んでいるエリアやよく行くエリアの店舗一覧があれば、片っ端から調べることが出来ます。

・地域的な偏りとかを研究している人には役に立つかも?

・チェーン店の経営母体が、「消費者から評価の悪い店舗をあぶり出しにするで!」というのに役立つかも。

使用イメージ:


まぁ実のところ、大したことはやっていません。エクセルファイルから店舗名を取得し、
店舗名+食べログでググり、1番上に表示される食べログ評価をスクレイピングしているだけです。
食べログ評価をエクセルに書き込んで、また同じことを繰り返します。

仕様:

・UWSCで作成しましたので、UWSC(フリーウェア)を準備下さい。
UWSCダウンロード

・あくまでもググった結果、一番上に表示される食べログ結果を機械的に取得しています。
食べログの中にアクセスして、その結果を取得するものではありません。
食べログ側に迷惑がかかるかもしれませんし、まぁ概ねググった結果と同じだろうということで。
ただし、食べログ側にアクセスして取得するように、改造は簡単です。
・エクセルとインターネットエクスプローラをご準備下さい。
IEを無理やりアンインストールした、ギークなPCでは動作させることが出来ません。
・一応1.5秒感覚で1万回繰り返す設定にしています。前後処理で0.5秒として、概ね2秒あれば1件、
1時間で1800件ほど処理できます。
・食べログで検索していると分かりますが、結構店舗が閉店しています。その場合は、【閉店】と書きます。

ソースコード:

言うほどソースコードではありませんが、一応公開。動けば良いんです動けば。重要なのは結果を出すこと。
過程や方法などどうでもよいのだァー!インデントも出来ないのかゆとりまん、というツッコミはご勘弁を。

ファイルとしてのダウンロードはこちら。右クリックで名前をつけて保存して下さい。

Public IE

EXCEL = GETACTIVEOLEOBJ("Excel.Application")
EXCEL.visible = True

//IE起動
ie = createOLEobj("InternetExplorer.Application")
ieid = getid("InternetExplorer")
IE.visible = True
ieid = GETID(GET_ACTIVE_WIN)
IE.Navigate("https://www.google.co.jp/")

for i = 0 to 10000 //とりあえず1万回実効
BusyWait()
IESetData(IE,excel.activecell.value + " 食べログ","q") // TEXT
BusyWait()

sckey(ieid, VK_ENTER)
sleep(1.5) //1.5秒待って検索結果を取得

tbody = ie.document.getelementsbyclassname("g")
GETOLEITEM(tbody) //クラス名gがない場合のエラー回避
if LENGTH(ALL_OLE_ITEM) = 0 then
else

//0個目のgを取得し、その中から食べログタグの抽出
tabelog = ALL_OLE_ITEM[0].outerhtml
if pos("【閉店】", tabelog) <> 0 //閉店だったら閉店と書く

tabelog = "【閉店】"
else
tabelog = betweenstr( tabelog, "</g-review-stars> ", "</div>")
endif

excel.activecell.offset(0,1).value = tabelog //エクセルに値を出力
endif
excel.activecell.offset(1,0).select //エクセルセルを1個下にずらす。
next

//以下おまじない。
// OleEvent(IE); IE.Quit() // OleEventクリア & IE終了

//——
DEF_DLL SendMessageA(Hwnd, Long, Long, Dword): bool: user32
CONST WM_ACTIVATE = $06
Public Pub_url, Pub_docc, Pub_BeforNav_cnt, Pub_DocComp_cnt, Pub_inp_flg
Procedure BusyWait()
Sleep(0.3)
tm = GetTime()
repeat
ifb GetTime() – tm > 90 // TimeOut
Pub_docc = ""; Pub_BeforNav_cnt=0; Pub_DocComp_cnt=0
IE.Navigate(Pub_url)
tm = GetTime()
endif
Sleep(0.2)
ifb Pub_inp_flg
Pub_inp_flg = False
continue
endif
if IE.busy then continue
if Pub_url = "" then break // No read
if (Pos("*"+Pub_url+"*",Pub_docc)) or (Pos("*"+IE.LocationURL+"*",Pub_docc)) or (Pub_BeforNav_cnt<=Pub_DocComp_cnt) then else continue
errflg = False
if IE.document.title = "503 Unavailable" then errflg = True
if IE.document.title = "Service Unavailable" then errflg = True
if IE.document.title = "503 Service Temporarily Unavailable" then errflg = True
ifb errflg
Sleep(90) // 503: Wait&Retry
tm = 0
continue
endif
Sleep(0.3)
until ! Pub_inp_flg
Pub_url=""; Pub_docc=""; Pub_BeforNav_cnt=0; Pub_DocComp_cnt=0
SendMessageA(IE.Hwnd, WM_ACTIVATE, 0, 0)
Fend
Procedure setOleEvent()
OleEvent(IE, "DWebBrowserEvents2", "BeforeNavigate2", "fucBeforNav")
OleEvent(IE, "DWebBrowserEvents2", "DocumentComplete", "fucDocComp")
OleEvent(IE, "DWebBrowserEvents2", "OnQuit", "fucQuit")
Pub_url=""; Pub_docc=""; Pub_BeforNav_cnt=0; Pub_DocComp_cnt=0; Pub_inp_flg=False
Fend
Procedure fucBeforNav()
ifb (Pos("javascript:",""+EVENT_PRM[1])=0) and ("about:blank"<>""+EVENT_PRM[1])
if Pub_url="" then Pub_url = ""+EVENT_PRM[1]
Pub_BeforNav_cnt = Pub_BeforNav_cnt + 1
endif
Pub_inp_flg = True
Fend
Procedure fucDocComp()
ifb (Pos("javascript:",""+EVENT_PRM[1])=0) and ("about:blank"<>""+EVENT_PRM[1])
Pub_docc = Pub_docc + "*"+EVENT_PRM[1]+"*"
Pub_DocComp_cnt = Pub_DocComp_cnt + 1
endif
Pub_inp_flg = True
Fend
Procedure fucQuit()
ExitExit
Fend

使用方法:

①まずUWSCをダウンロードして実行します。フリー版でOKです。
②起動したらホットキーを設定して下さい。再生と停止だけ設定して下さい。
管理人は再生がCTRL+F1、停止がCTRL+F2にしました。他の起動中ソフトとかぶらなければ何でもOKです。

③動作させたいエクセルを起動し、店舗名を選択してください。その状態で再生してください。
(ここでいうショートカットキーはCTRL+F1)
④後はIEが立ち上がって適当にぐるぐる周ります。重要なのは、エクセルで店舗名をアクティブにした状態で
スタートしないと、上手いこと動作しませんのでご注意を。
⑤終了はCTRL+F2で終わります。

という訳で、説明は終わります。とりあえず動作させて遊んでみましょう。
要望があれば、承りますのでどうぞ。ただ、管理人も文系の素人ですので、技術的な質問には答えづらいです。


スポンサーリンク

この記事が気に入ったら
いいね または フォローしてね!

  • URLをコピーしました!
スポンサーリンク
0 0 votes
この記事を評価する。
Subscribe
Notify of
0 コメント
Inline Feedbacks
View all comments
0
なにか言いたいことがありましたら、コメントをどうぞ。x
()
x