【发布时间】:2017-01-18 02:09:35
【问题描述】:
我正在使用 selenium 从使用 JavaScript 加载数据的 webpage 中抓取体育结果。我编写了一个简单的函数来获取 html 代码并将其发送到美丽的汤,然后解析相关部分(见下文)。为了获得所有结果,我需要 selenium 来单击“显示更多结果”按钮。不幸的是,这不能正常工作 - 该函数只返回最初可见的结果:
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
该函数应返回 150 多个元素的列表,但仅返回 141。关于如何修复的任何想法?在页面有机会加载其他结果之前,代码似乎继续运行?
【问题讨论】:
-
总是141吗?您确定该页面每次实际加载 150 多个项目吗?您可以等到项目 n° 150 显示。 ("//tr[150]" 我想)
标签: python python-3.x selenium selenium-chromedriver