我正在努力让每个参赛者都能获胜。来自this 2017 marathon的信息。问题是,要获得我想要的信息,我必须点击每个跑步者'得到他的partial splits的名字。
我知道我可以使用获取请求来获取每个参赛者。信息。例如,对于跑步者Josh Griffiths,我可以使用网址中的参数request.get
。
我的问题是我不知道如何找出idp
这个词,因为这个词随每个跑步者而变化。
我的问题如下:
是否可以使用循环来获取所有跑步者'使用get请求的信息?如何用`idp来解决问题?我的意思是,我不知道这个术语是如何确定的,而且我不知道如何使用它来定义循环。
是否有更好的方法让每个跑步者获得'信息?我想过使用Selenium-Webdriver,但这会很慢。
任何建议都将不胜感激!
答案 0 :(得分:1)
您需要使用类似BeautifulSoup的内容来解析HTML以获取所需的链接,这样就无需尝试找出如何构建请求。
import requests
from bs4 import BeautifulSoup
base_url = "http://results-2017.virginmoneylondonmarathon.com/2017/"
r = requests.get(base_url + "?pid=list")
soup = BeautifulSoup(r.content, "html.parser")
tbody = soup.find('tbody')
for tr in tbody.find_all('tr'):
for a in tr.find_all('a', href=True, class_=None):
print
print a.parent.get_text(strip=True)[1:]
r_runner = requests.get(base_url + a['href'])
soup_runner = BeautifulSoup(r_runner.content, "html.parser")
# Find the start of the splits
for h2 in soup_runner.find_all('h2'):
if "Splits" in h2:
splits_table = h2.find_next('table')
splits = []
for tr in splits_table.find_all('tr'):
splits.append([td.text for td in tr.find_all('td')])
for row in splits:
print ' {}'.format(', '.join(row))
break
对于每个链接,您需要关注它并解析返回的HTML中的拆分。该脚本将显示如下:
Boniface, Anna (GBR)
5K, 10:18:05, 00:17:55, 17:55, 03:35, 16.74, -
10K, 10:36:23, 00:36:13, 18:18, 03:40, 16.40, -
15K, 10:54:53, 00:54:44, 18:31, 03:43, 16.21, -
20K, 11:13:25, 01:13:15, 18:32, 03:43, 16.19, -
Half, 11:17:31, 01:17:21, 04:07, 03:45, 16.04, -
25K, 11:32:00, 01:31:50, 14:29, 03:43, 16.18, -
30K, 11:50:44, 01:50:34, 18:45, 03:45, 16.01, -
35K, 12:09:34, 02:09:24, 18:51, 03:47, 15.93, -
40K, 12:28:43, 02:28:33, 19:09, 03:50, 15.67, -
Finish, 12:37:17, 02:37:07, 08:35, 03:55, 15.37, 1
Griffiths, Josh (GBR)
5K, 10:15:52, 00:15:48, 15:48, 03:10, 18.99, -
10K, 10:31:42, 00:31:39, 15:51, 03:11, 18.94, -
....
为了更好地理解其工作原理,首先需要查看每个页面的HTML源代码。我们的想法是在页面结构中找到您正在寻找的内容的独特之处,以允许您使用脚本提取它。
接下来,我建议您阅读BeautifulSoup的文档页面。这假设您了解HTML文档的基本结构。该库为您提供了许多工具,可帮助您从HTML中搜索和提取元素。例如,查找链接的位置。并非所有网页都可以像这样解析,因为信息通常是使用Javascript创建的。在这些情况下,您需要使用类似selenium
的内容,但在这种情况下,requests
和beautifulsoup
可以很好地完成工作。