关于通过get请求的参数使用循环的建议

时间:2017-09-04 16:09:21

标签: python web-scraping beautifulsoup request

我正在努力让每个参赛者都能获胜。来自this 2017 marathon的信息。问题是,要获得我想要的信息,我必须点击每个跑步者'得到他的partial splits的名字。

我知道我可以使用获取请求来获取每个参赛者。信息。例如,对于跑步者Josh Griffiths,我可以使用网址中的参数request.get

我的问题是我不知道如何找出idp这个词,因为这个词随每个跑步者而变化。

我的问题如下:

  1. 是否可以使用循环来获取所有跑步者'使用get请求的信息?如何用`idp来解决问题?我的意思是,我不知道这个术语是如何确定的,而且我不知道如何使用它来定义循环。

  2. 是否有更好的方法让每个跑步者获得'信息?我想过使用Selenium-Webdriver,但这会很慢。

  3. 任何建议都将不胜感激!

1 个答案:

答案 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的内容,但在这种情况下,requestsbeautifulsoup可以很好地完成工作。