【问题标题】:Scraping web Football Data抓取网络足球数据
【发布时间】:2022-01-01 11:44:09
【问题描述】:

我想从网站“https://www.maxifoot.fr/classement-buteur-eu​​rope-annee-civile-2021.htm”中抓取数据

我尝试在 Python 上提取这些数据,但无法成功。我想用这些数据和相同的字段在 Python 上创建一个表。有人可以尝试帮助我使用 pandas、beautifulsoup ... 提取数据的脚本吗?

我已经试过了:

import requests
from bs4 import BeautifulSoup
import pandas as pd
url = 'https://www.maxifoot.fr/classement-buteur-europe-annee-civile-2021.htm'
r = requests.get(url)

soup = BeautifulSoup(r.text, 'lxml')
print(soup.prettify())
for i in soup.find_all("tr"):
    print(i.find_all("td"))
    print ("")
    colonnes = ["Nom","Equipe","Buts","Matchs joués"]
    df = pd.DataFrame(columns = colonnes)
df

for i in soup.find_all("tr")[1:]:
    href = i.find_all("td")
    df = df.append({'Nom': href}, ignore_index=True)

print(df.head())

【问题讨论】:

  • 您能告诉我们您尝试了什么吗?
  • 好的答案需要好的问题,请通过改进您的问题来帮助大家理解您的问题。通常,现有代码和预期结果应以文本形式呈现。另请阅读 --> 如何创建 minimal reproducible example 谢谢
  • 这是我试过的! (在问题中)

标签: python web-scraping beautifulsoup


【解决方案1】:

有一种更简单的方法来获取数据并将其放入数据框中 - 使用 pandas.read_html 并在需要时使用 pandas 进行调整。

df = pd.read_html('https://www.maxifoot.fr/classement-buteur-europe-annee-civile-2021.htm', match = 'min/but*')[1]

df['href'] = df["Joueur"].apply(lambda x: 'https://www.maxifoot.fr'+soup.select_one(f'a:-soup-contains("{x}")')['href'])

如果你喜欢用 BeautifulSoup 解决它,你需要做一些调整:

...
data = []
for row in soup.select('.butd1 tr')[1:]:
    strings = list(row.stripped_strings)
    strings[3:5] = [''.join(strings[3:5])]
    strings[6:8] = [''.join(strings[6:8])]
    a = 'https://www.maxifoot.fr'+row.a['href']
    strings.append(a)
    data.append(strings)
colonnes = ['Pos','Nom','Equipe','Buts','dontchamp.','Matchs joués','min/but*','href']
pd.DataFrame(data,columns = colonnes)

输出

Pos Nom Equipe Buts dontchamp. Matchs joués min/but* href
1. R. LEWANDOWSKI Bayern Munich 58 (11 p.) 43 47 (1,23 b/m) 68' https://www.maxifoot.fr/joueur/robert-lewandowski-13191.htm
2. E. HAALAND Borussia Dortmund 43 (6 p.) 30 43 (1,00 b/m) 85' https://www.maxifoot.fr/joueur/erling-haland-190157.htm
. K. MBAPPÉ Paris SG 43 (7 p.) 24 53 (0,81 b/m) 104' https://www.maxifoot.fr/joueur/kylian-mbappe-lottin-183802.htm
4. K. BENZEMA Real Madrid 38 (3 p.) 30 50 (0,76 b/m) 109' https://www.maxifoot.fr/joueur/karim-benzema-10476.htm
5. MOHAMED SALAH Liverpool 37 (4 p.) 24 53 (0,70 b/m) 122' https://www.maxifoot.fr/joueur/mohamed-salah-59580.htm

...

【讨论】:

  • 好吧,但是当我尝试这个脚本时,我有一个错误:
  • SSLCertVerificationError Traceback(最近一次调用最后一次)... SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败:证书已过期 (_ssl.c:1125)
  • 请注意为什么会在您的网站上发生这种情况,希望所有库都是最新的 - 但是,还添加了 BeautifulSoup 方法,看看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-02
相关资源
最近更新 更多