繁体   English   中英

Web 抓取 python 到 csv 文件问题

[英]Web scraping python to csv file problems

拜托,我想将信息表“Meilleurs buteurs par édition”放入 csv 文件中,我尝试使用此代码,但 csv 文件似乎是空的,output 是第一个表,而不是我需要一些人帮助我的表!在此处输入图像描述

from bs4 import BeautifulSoup
import  requests
import  pandas as pd
URL='https://fr.wikipedia.org/wiki/Liste_des_buteurs_de_la_Coupe_du_monde_de_football'
results=[]
response = requests.get(URL)
soup= BeautifulSoup(response.text, 'html.parser')

#print(soup)
#table= soup.find('table')
table = soup.find("table")
tbody=table.find("tbody")
#table = soup.find("table", {"class":"wikitable sortable jquery-tablesorter"})
#table = soup.find("table", {"class":"wikitable sortable alternance jquery-tablesorter"}).tbody
#print(table)
rows=table.findAll('tr')
columns=[v.text.replace('\n', '') for v in rows[0].find_all('th')]
df=pd.DataFrame(columns=columns)
for i in range (1,len(rows)):
    tds=rows[i].find_all('td')
    if len(tds)==6:
        values = [tds[0].text,tds[1].text,tds[2].text,tds[3].text,tds[4].text,tds[5].text]
    else:
        #for i in range(7):
           # df = df.append({'columns': i}, ignore_index=True)
       values=[td.text for td in tds]
    df = df.append(pd.Series(values), ignore_index=True)

    print(df)

print(columns)

df = pd.DataFrame(columns=['A'])
for i in range(5):
    df = df.append({'A': i}, ignore_index=True)
    df = pd.DataFrame({'test': results})
    df.to_csv('but.csv', index=False, encoding='utf-8')

Output Rang Joueur Équipe... 3 4 5 0 NaN NaN NaN... 24\n 0,67\n 16\n 1 NaN NaN NaN... 19\n 0,79\n 15\n 2 NaN NaN NaN ... 13\n 1,08\n 14\n 3 NaN NaN NaN... 6\n 2,17\n 13\n 4 NaN NaN NaN... 14\n 0,86\n 12\n 5 NaN NaN NaN... 5\n 2,2\n 11\n 6 NaN NaN NaN... 17\n 0,65\n 11\n 7 NaN NaN NaN... 10\n 1\n 10 \n 8 NaN NaN NaN... 12\n 0,83\n 10\n 9 NaN NaN NaN... 12\n 0,83\n 10\n 10 NaN NaN NaN... 13\n 0, 77\n 10\n 11 NaN NaN NaN... 16\n 0,63\n 10\n 12 NaN NaN NaN... 20\n 0,5\n 10\n

[13 行 x 13 列] ['Rang', 'Joueur', 'Équipe', 'Détail par édition', 'Matchs', 'Ratio', 'Buts']

最简单的方法是使用pandas.read_html

import pandas as pd

url = "https://fr.wikipedia.org/wiki/Liste_des_buteurs_de_la_Coupe_du_monde_de_football"

df = pd.read_html(url)[1]
df["Ratio"] = df["Buts"] / df["Matchs"]
print(df)
df.to_csv("data.csv", index=False)

印刷:

    Édition               Joueur                Équipe  Matchs     Ratio  Buts
0      1930    Guillermo Stábile             Argentine       4  2.000000     8
1      1934      Oldřich Nejedlý       Tchécoslovaquie       4  1.250000     5
2      1938             Leônidas                Brésil       4  1.750000     7
3      1950               Ademir                Brésil       6  1.333333     8
4      1954        Sándor Kocsis               Hongrie       5  2.200000    11
5      1958        Just Fontaine                France       6  2.166667    13
6      1962       Flórián Albert               Hongrie       3  1.333333     4
7      1962            Garrincha                Brésil       6  0.666667     4
8      1962      Valentin Ivanov      Union soviétique       4  1.000000     4
9      1962      Dražan Jerković           Yougoslavie       6  0.666667     4
10     1962       Leonel Sánchez                 Chili       6  0.666667     4
11     1962                 Vavá                Brésil       6  0.666667     4
12     1966              Eusébio              Portugal       6  1.500000     9
13     1970          Gerd Müller  Allemagne de l’Ouest       6  1.666667    10
14     1974        Grzegorz Lato               Pologne       7  1.000000     7
15     1978         Mario Kempes             Argentine       7  0.857143     6
16     1982          Paolo Rossi                Italie       7  0.857143     6
17     1986         Gary Lineker            Angleterre       5  1.200000     6
18     1990  Salvatore Schillaci                Italie       7  0.857143     6
19     1994         Oleg Salenko                Russie       3  2.000000     6
20     1994    Hristo Stoitchkov              Bulgarie       7  0.857143     6
21     1998          Davor Šuker               Croatie       7  0.857143     6
22     2002              Ronaldo                Brésil       7  1.142857     8
23     2006       Miroslav Klose             Allemagne       7  0.714286     5
24     2010         Diego Forlán               Uruguay       7  0.714286     5
25     2010        Thomas Müller             Allemagne       6  0.833333     5
26     2010      Wesley Sneijder              Pays-Bas       7  0.714286     5
27     2010          David Villa               Espagne       7  0.714286     5
28     2014      James Rodríguez              Colombie       5  1.200000     6
29     2018           Harry Kane            Angleterre       6  1.000000     6

并保存data.csv (来自 LibreOffice 的屏幕截图):

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM