【问题标题】:Advice about using a loop through parameters of a get request关于通过 get 请求的参数使用循环的建议
【发布时间】:2018-02-12 21:56:09
【问题描述】:

我正在尝试从this 2017 marathon 获取每个跑步者的信息。问题是要获得我想要的信息,我必须点击每个跑步者的名字才能得到他的partial splits

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

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

我的问题如下:

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

  2. 有没有更好的方法来获取每个跑步者的信息?我考虑过使用 Selenium-Webdriver,但这会很慢。

任何建议将不胜感激!

【问题讨论】:

  • 链接已损坏。
  • @Tico 他们在我的浏览器中工作。
  • 嗯...现在他们工作了.. :/ 奇怪...之前有一个破碎的推特页面。很奇怪。对此感到抱歉。

标签: python web-scraping beautifulsoup request


【解决方案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 可以很好地完成这项工作。

【讨论】:

    猜你喜欢
    • 2017-04-14
    • 1970-01-01
    • 2020-02-17
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多