我正在尝试整理餐馆的评论。 Urllib2适用于评论的初始页面,但是有一个链接可以加载下一个评论增量,这是一个javascript链接。示例页面为here,链接“Next 25”的代码为:
<a href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$RestRatings$Next','')" class="red" id="ctl00_ContentPlaceHolder1_RestRatings_Next">NEXT 25>> </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()
答案 0 :(得分:2)
当用户点击该链接时,在客户端的javascript中调用函数__doPostBack。您提供的其他问题的链接假定此函数进行AJAX调用,然后将结果放在同一页面中。
但是,您链接到的评论页面不会这样做。它确实进行了AJAX调用,但随后重新加载了同一页面。我无法捕获AJAX调用的内容,因为它会立即重新加载,但由于页面只是使用新注释重新加载,我很确定它告诉服务器将您移动到下一页。
因此,为了获得您的下一页评论,您必须调用__doPostBack函数正在调用的相同URL,然后重新加载您所在的页面。为了找到这个网址,我会对他们的javascript进行去混淆并找到被调用的函数。我相信将要调用的实际URL将取决于该函数的参数,因此您希望确保复制它的功能。
答案 1 :(得分:1)
按id="ctl00_ContentPlaceHolder1_RestRatings_Next"
找到元素,然后点击它。