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の任意のアイデアを返します。関数は、元々表示されていた結果を返します - 残念ながら、これは正しく動作しません。 ?ページが追加の結果を読み込む前にコードが実行され続けているようですが?
いつも141ですか?毎回ページに実際に150以上のアイテムが読み込まれていますか?商品番号150が表示されるまで待つことができます。 ( "// tr [150]"と思います) –