匿名質問者

Python mechanizeに詳しい方に質問です。


Python mechanizeを使って、

JTBのサイトからツアー商品の情報を自動収集したいと思っています。

例えば、

下記のリンクにPCのブラウザ上から飛ぶと、

http://ovspkg.jtb.co.jp/pkg/toursearch/search_result.aspx?deptplacecd=HND&destareacd=HWI

羽田出発、目的地ハワイのツアー商品が

読み込み中と出た後、ブラウザ上で表示されますが、

下記のコードを使って、スクレイピングすると、

br = mechanize.Browser()$
br.addheaders = [('User-agent', 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_0 like Mac OS X; ja-jp) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5A345 Safari/525.20')]
br.open('http://ovspkg.jtb.co.jp/pkg/toursearch/search_result.aspx?deptplacecd=HND&destareacd=HWI')
print br.response().resd()

読み込みという状態でのHTMLは取得できませんが、

その後の読み込み後のリンクなどを取得できません。

どうにか、読み込み後のHTMLを取得したいのですが、

良い方法を知っている方はいらっしゃいませんでしょうか?

よろしくお願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/12/23 21:57:19

ベストアンサー

匿名回答1号 No.1

検索結果はajaxで取ってきています。なのでjavascriptを実行するか、エミュレーションする必要があります。

一つはjavascriptも解釈してくれるツールを使うことです。
http://hatakazu.hatenablog.com/entry/2012/06/10/083928
http://qiita.com/tekkoc/items/f610289c7ce36f680d94

も一つは人力でアクセスやスクリプトを解析してpythonで必要な事を行います。
簡単なことなら出来ますね。
http://d.hatena.ne.jp/mohayonao/20120101/1325374486

複雑なのも根気よく解析すれば不可能ではないですが...
JTBのも難読化されているわけでもないようですが...
...

mechanizeは諦め、も一つの方を勧めます。

匿名質問者

早速の回答ありがとうございます。

オススメされた一つ目のリンク先で紹介されているseleniumを使用することで、
無事スクレイピングをすることができました。
本当にありがとうございます。

もしかしたら、同じ悩みを持っている人がいるかもしれませんので、
自分のプログラムものせておきます。
from selenium import webdriver
browser = webdriver.Firefox() # Get local session of firefox
browser.get('http://ovspkg.jtb.co.jp/pkg/toursearch/search_result.aspx?deptplacecd=HND&destareacd=HWI’)
sleep(15);%読み込み終わりまで待つ
print browser.page_source.encode("utf_8","ignore")

本当にありがとうございました。
実は、今回初めて質問サイトを使用しましたが、
こんなに早く、的確な回答が来て驚いています。
自分も早く様々な人を助けられるように勉強していきたいです。

2013/12/23 21:56:54

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません