1

私はレストランのレビューを照合しようとしています。Urllib2はレビューの最初のページでは正常に機能しますが、JavaScriptリンクであるコメントの次の増分をロードするためのリンクがあります。サンプルページはここにあり、リンク「Next25」のコードは次のとおりです。

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

私は以前のすべての答え(例えば)を見てきました、そして私は私が賢明ではないと言わなければなりません。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()
4

2 に答える 2

2

ユーザーがそのリンクをクリックすると、クライアントのjavascriptで関数__doPostBackが呼び出されます。あなたが提供した他の質問へのリンクは、この関数がAJAX呼び出しを行い、結果を同じページに配置することを前提としています。

ただし、リンクしているレビューページはそれを行いません。AJAX呼び出しを行いますが、同じページをリロードします。AJAX呼び出しがすぐにリロードされるため、トラップすることができませんでしたが、ページが新しいコメントでリロードされているだけなので、サーバーに次のページに移動するように指示していると確信しています。

したがって、コメントの次のページを取得するには、__ doPostBack関数が呼び出しているのと同じURLを呼び出してから、現在のページをリロードする必要があります。このURLを見つけるために、私は彼らのjavascriptを難読化解除し、呼び出されている関数を見つけます。呼び出される実際のURLは、その関数のパラメーターに依存すると思います。そのため、その機能を確実に複製する必要があります。

于 2012-11-18T01:13:26.217 に答える
1

で要素を見つけてid="ctl00_ContentPlaceHolder1_RestRatings_Next"クリックします。

于 2012-11-18T01:04:17.150 に答える