<div onclick="control.moreData()" id="moreLink">More...</div>
ユーザーは、ページの下部にある要素をクリックして、(以前の日付から) ページにさらにコンテンツを追加します。
したがって、目的のコンテンツを取得するには、Selenium を使用してid="moreLink"
要素をクリックするか、JavaScript を実行control.moreData();
してループ内で呼び出すことができます。
たとえば、2013 年 2 月 15 日金曜日までさかのぼってすべてのコンテンツを取得する場合 (この形式の文字列は、読み込まれたコンテンツのすべての日付に存在するように見えます)、Python は次のようになります。
content = browser.page_source
desired_content_is_loaded = false;
while (desired_content_is_loaded == false):
if not "Friday, February 15, 2013" in content:
sel.run_script("control.moreData();")
content = browser.page_source
else:
desired_content_is_loaded = true;
編集:
ブラウザで JavaScript を無効にしてページをリロードすると、「トレンド」コンテンツがまったくないことがわかります。つまり、これらのアイテムは動的にロードされるということです。つまり、ページを開いたときにダウンロードされる HTML ドキュメントの一部ではありません。Selenium の .get() は、HTML ドキュメントが読み込まれるのを待ちますが、すべての JS が完了するのを待ちません。非同期 JS が他のイベントの前または後に完了するかどうかはわかりません。準備ができたら完了し、毎回異なる可能性があります。これは、呼び出し時にそのコンテンツのすべて、一部、またはまったく取得できない場合がある理由を説明しています。browser.page_source
これは、非同期 JS がその時点でどれだけ高速に動作しているかに依存するためです。
そのため、ページを開いた後、ソースを取得する前に数秒待ってみてください。これにより、コンテンツをロードする JS が完了するまで時間がかかります。
browser.get(googleURL)
time.sleep(3)
content = browser.page_source