23331


googleplayの以下のサイトのhtmlをpythonで取得したところ、アプリのランキングが60位までしかのっていないものでした。

<https://play.google.com/store/apps/collection/topselling_free?hl=ja>  
でソースコードを表示すると同じく60位までしか表示されません。

調べたところ、Javascriptか何かでレンダリングされているとのことだったのですが、どのようにしたら60以降のアプリの情報ものったhtmlが取得できるか知りたいです。

htmlを取得したい理由は個々のアプリの詳細ページへのリンクを取得したいからです。  
個々のアプリの詳細ページのリンクさえ取得できれば、手段は問いません。

seleniumなどを利用することも考えましたが、ド素人なのでうまい対策が分かりませんでした。

回答の程、よろしくお願い致します。


CC BY-SA 3.0
2016-03-21T15:24:57.163
23322
2016-03-22T08:52:38.607
2016-03-22T07:42:06.963
3054
10111
question
python ajax
無限スクロールでページの内容が随時読み込まれる場合のスクレイピング


例えば、このようなURLでアクセスすると  
[https://play.google.com/store/apps/collection/topselling_free?hl=ja&start=60&num=30](https://play.google.com/store/apps/collection/topselling_free?hl=ja&start=60&num=30)  
60位から90位が取得出来ます。

こういったリクエストのパラメータを探すには、Webブラウザのデベロッパーツールなどで該当ページの挙動を観察すればよいです。  
しかし、これからは多くのWebページが「Webアプリケーション」化していくので、難易度は上っていくでしょう。  
やはり、seleniumやPhantomJSなどのようにブラウザをまるごと内蔵（操作）しているクライアントでクロールするのが楽だと思います。

* * *

追記:

> ソースコードのどこをみればよいか

ですが、Webアプリケーションのソースをただ読んで追っていくのは普通の人には厳しいと思います。既にそういう時代です。  
挙動を観察するのが基本かと思います。

下にスクロールすると続きが読み込まれる「無限スクロール」の場合、観察するのは  
\- スクロールイベント周辺  
\- ネットワークのリクエスト  
のどちらかです。

このページに関していうと、下までスクロールした際にXHR(XMLHttpRequests)による  
`https://play.google.com/store/apps/collection/topselling_free?hl=ja&authuser=0`
に対するPOST要求が観察出来ます。  
POSTデータはこんな感じです。  

[code]

    start=60
    num=60
    numChildren=0
    cctcss=square-cover
    cllayout=NORMAL
    ipf=1
    xhr=1
    token= ...
    hl=ja
    
[/code]

この中から必要な物を使う事になります。今回はstartとnumだけでよかったです。試してみるとGETも受け付けたので、上記URLが作れたわけです。  
観察には[Firefoxの開発ツール](https://developer.mozilla.org/ja/docs/Tools/Network_Monitor)を使いました。


CC BY-SA 3.0
2016-03-22T03:02:37.747
23331
2016-03-22T07:36:59.873
2016-03-22T07:36:59.873
3054
3054
23322
answer