2017-01-18 3 views
0

JavaScriptでデータをロードするwebpageからスポーツ結果をスクレイプするためにセレンを使用しています。私はhtmlコードをつかみ、それを美しいスープに送り、関連するパーツを解析する簡単な関数を書いています(下記参照)。すべての結果を得るために、「結果をもっと表示」ボタンをクリックするにはセレンが必要です。関数は、150個の以上の要素のリストを返す必要がありますボタンクリック後にセレンがリロードするのを待たずに

url="'http://www.flashscore.com/tennis/wta-singles/australian-open-2016/results/'" 
def get_results(url): 
    try: 
     from urllib.request import Request, urlopen 
     req = Request(url) 
     s = urlopen(req,timeout=20).read() 
     driver.get(url) 
     try: 
      driver.find_element_by_xpath("""//*[@id="tournament-page-results-more"]/tbody/tr/td/a""").click() 
      time.sleep(5) 
     except: 
      print("No more results to show...") 
     body=driver.find_element_by_id("fs-results") 
     soup=BeautifulSoup(body.get_attribute("innerHTML"), "lxml") 
     matches=[] 
     rrows=soup.find_all("tr") 
     for rrow in rrows: 
      if rrow.attrs['class']!=['event_round']: 
       matches.append(rrow) 
    except: 
     print("Webpage doesn't exist") 
    return matches 

、代わりにのみ修正する方法についての141の任意のアイデアを返します。関数は、元々表示されていた結果を返します - 残念ながら、これは正しく動作しません。 ?ページが追加の結果を読み込む前にコードが実行され続けているようですが?

+0

いつも141ですか?毎回ページに実際に150以上のアイテムが読み込まれていますか?商品番号150が表示されるまで待つことができます。 ( "// tr [150]"と思います) –

答えて

0

Python標準ライブラリのtimeモジュールを使用できます。

ボタンをクリックするコードの後ろにtime.sleep(x)を挿入するだけで済みます。 xは、Seleniumが待機する秒数です。

timeモジュールとsleep()機能の詳細については、thisページをお読みください。

+0

私はこれを考慮しましたが、何かクリーナーを探しています。どのくらいの期間xする必要がありますか? 5秒?これでいつも十分でしょうか?私はそこにウェブページのステータスや何かをチェックする方法があると思っています。 – user3725021

+0

ドキュメントがロードされているかどうかをJavaScriptで確認したり、要素を数えたり、特定の時間が経過したかどうかを確認したりできます。 – electronicdaisy

関連する問題