2012-11-18 149 views
1

我正在整理餐廳的評論。 Urllib2適用於評論的初始頁面,但是有一個鏈接可以加載下一個增量評論,這是一個JavaScript鏈接。一個例子頁here,並鏈接「下一步25」的代碼是:模擬點擊python中的JavaScript鏈接

<a href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$RestRatings$Next','')" class="red" id="ctl00_ContentPlaceHolder1_RestRatings_Next">NEXT 25&gt;&gt; </a> 

我已經看過了所有以前的答案(e.g.),我不得不說,我仍然不明白。在Firebug中查看控制檯不提供方便的鏈接。你能建議最好的(最簡單的)方法來實現嗎?

編輯: 與感謝Seleniumnewbie這個代碼就可以通過評論打印出所有的評論:

from selenium import webdriver 
from BeautifulSoup import BeautifulSoup 
import re 

driver = webdriver.Firefox() 

def getURLinfo(url): 

    driver.get(url) 
    html = driver.page_source 
    next25 = "ctl00_ContentPlaceHolder1_RestRatings_Next" 
    soup = BeautifulSoup(html) 

    while soup.find(id=re.compile(next25)):    
     driver.find_element_by_id(next25).click() 
     html = html + driver.page_source 
     soup = BeautifulSoup(driver.page_source) 

    soup = BeautifulSoup(html) 
    comment = soup.findAll(id=re.compile("divComment")) 

    for entry in comment: 
     print entry.div.contents #for comments 

    driver.close() 

回答

1

id="ctl00_ContentPlaceHolder1_RestRatings_Next"查找元素,然後單擊它。

+0

用什麼工具 - 硒? – user578582

+0

是selenium webdriver – Amey

+0

好的,謝謝,我明天就試試看,並保持發佈! – user578582

2

當用戶單擊該鏈接時,函數__doPostBack正在客戶端的JavaScript中調用。您提供的其他問題的鏈接假定​​此函數執行AJAX調用,然後將結果放入同一頁面。

但是,您鏈接到的評論頁面沒有這樣做。它確實進行了一次AJAX調用,但隨後它重新加載了相同的頁面。我無法捕捉AJAX調用的內容,因爲它會立即重新加載,但由於頁面只是重新加載新評論,所以我很確定它告訴服務器將您移到下一頁。

因此,爲了獲得您的下一頁評論,您將不得不調用__doPostBack函數調用的相同url,然後重新加載您所在的頁面。要找到這個URL,我會去混淆他們的javascript並找到被調用的函數。我相信將被調用的實際URL將取決於該函數的參數,因此您要確保複製它的功能。

+0

謝謝,我找不到類似於javascript(「www」,「http」,「review」)中的url的東西,所以我使用了selenium brute force方法! – user578582