使用 python 进行网页抓取的初学者:使用 BeautifulSoup 并通过类查找时,我要么得到错误的类,要么结果为“无”

Beginner in web scraping with python: When using BeautifulSoup and finding via class I either get the wrong class or the result "None"

提问人:babytroopr 提问时间:11/17/2023 最后编辑:badukerbabytroopr 更新时间:11/18/2023 访问量:47

问:

我想从以下网站获取UCI积分:https://www.procyclingstats.com/rider/tadej-pogacar

首先,我只想从最新一场比赛中抢到uci积分。

到目前为止,我的代码是:

import requests
from bs4 import BeautifulSoup
import pandas as pd

page = requests.get("https://www.procyclingstats.com/rider/tadej-pogacar")
soup = BeautifulSoup(page.text, "lxml")
result_date = soup.find("td", class_ = False, id = False, style = False).text
print(result_date)
uci = soup.find("td", class_ = "cu600 ")
print(uci)

当我运行代码时,我要么得到类“gc cu600”,要么得到“无”,这取决于我是否搜索“cu600”或“cu600”。

有人知道我做错了什么吗?

python-3.x pandas 网页抓取 beautifulsoup

评论

0赞 David 11/17/2023
你的意思是当你寻找班级时,你会得到你期望的结果,但当你寻找班级时,你却没有?我不清楚你在问什么。"cu600""cu600 "
0赞 babytroopr 11/18/2023
@David - 标签最初称为 class=“cu600 ”。当我将其用作我的类时,我得到的结果为“None”。所以我想我会尝试 class_ = “cu600”,但是当我这样做时,我得到“<td class=”gc cu600“></td>”而不是“<td class=”cu600“>238</td>”。我似乎无法弄清楚为什么它选择了另一个班级而不是我输入的班级:/所以,无论哪种方式,我都没有得到预期的结果。
0赞 David 11/18/2023
好吧,并不是一个真正的有效类。类是空格分隔的,因此单个类名不能包含空格。在搜索类时,我完全希望它匹配,因为该元素具有该类。听起来也许这只是你的误解?它不会寻找只有该类的元素,而是寻找任何具有该类的元素。"cu600 ""cu600"<td class="gc cu600">
0赞 babytroopr 11/18/2023
@David - 我肯定有一个误解。这是否意味着class=“gc cu600”是两个类?
0赞 David 11/18/2023
正确,并且将是两个独立的类,并且搜索任何一个类的元素都应该与该元素匹配。gccu600

答:

0赞 baduker 11/18/2023 #1

以下是获取UCI Points

import requests
import pandas as pd

url = "https://www.procyclingstats.com/rider/tadej-pogacar"

df = pd.concat(pd.read_html(requests.get(url).text, flavor="lxml"))
print(df["Points UCI"].dropna().to_string(index=False))

要从最新一场比赛中获得积分,只需将最后一行更改为:

print(df["Points UCI"].iloc[0])

输出(所有点):

   800
    85
   150
   125
    60
     3
   600
  1040
   210
   150
   150
   110
    20
    15
    30
   210
    40
   110
   110
   100
    50
   400
   500
   800
   260
   440
   500
    60
60 +10
   +10
60 +10
  2.86
   200
 20 +5
    +5
 20 +5
 20 +5
   125

评论

1赞 babytroopr 11/18/2023
谢谢。我将研究使用这种方法。我只是假设您必须使用 BeautifulSoup 进行网络抓取,因为这是我在多门课程中看到的:D但我很高兴有其他方法可以解决这个问题,所以谢谢!对于链接中的表格,这种方法是否更好?