用戶通過點擊<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
通過selenium爲此使用webdrivers的任何具體原因? – Torxed
@Torxed - 我懷疑這是因爲動態內容/ JavaScript處理... – root
是的,我試過urllib2,但它沒有工作,由於動態內容/ javascript – user2392965