私はテニスの試合の結果をthis webpageから掻き出しようとしています。特に、私は2人のプレイヤーの名前、日付/時刻、試合の結果を得ようとしています。これらは、ページの下部にある「情報をもっと示し、」クリックして明らかにすることができる - Webページは、デフォルトではすべての一致を表示しませんPythonを使用してWebからデータをスクラップxhrフィード
:私は2つの問題を抱えています。
美味しいスープでhtmlを読み込むと、データがそこに表示されません。何らかの種類のクエリ( 'http://d.flashscore.com/x/feed/f_')によってロードされているようですが、これを直接実行する方法がわかりません。
私のコード例は以下の通りです:
url="http://www.scoreboard.com/au/tennis/wta-singles/australian-open-2016/results/"
from urllib.request import Request, urlopen
req = Request(url, headers={"X-Fsign": "SW9D1eZo"})
s = urlopen(req,timeout=50).read()
s=urlopen(req, timeout=50).read()
soup=BeautifulSoup(s, "lxml")
match_times=soup.find_all("td", class_="cell_ad time")
players=soup.find_all("span", class_="padl"
results=soup.find_all("td", class_"cell_sa score bold"
#these all return empty element sets
どのように私は目に見えるすべての結果にページをロードすることができますか?そして、上記のデータをどのようにエレガントに抽出することができますか?
EDIT: セレンを使用するために提案した後、私はセレン/ Chromeを使用してページをロードし、BS4にHTMLを送信する機能を構築しています:
def open_url(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")
return BeautifulSoup(body.get_attribute("innerHTML"), "lxml")
except:
print("Webpage doesn't exist")
これは私がすべての結果を明らかにできることを意味しますボタンをクリックすると表示されます。残念ながら、コードは、私は結果を含むすべての行をつかむしようとすると、したがって、適切にページが読み込まれる前に実行し続けます。
matches=[]
soup=open_url(url)
rrows=soup.find_all("tr")
for rrow in rrows:
if rrow.attrs['class']!=['event_round']:
matches.append(rrow)
それだけで元々見えていた結果が得られます。どうすればこの問題を解決できますか?
セレンをよく知っているわけではありません。 – user3725021
@ user3725021 http://selenium-python.readthedocs.io/ –
セレンを使用するようにコードを修正しました(上記参照)。まだ問題がありますが、コードがロードされる前にページのロードが完了しない... – user3725021