Скребковый стол Python - PullRequest
       8

Скребковый стол Python

0 голосов
/ 06 марта 2019

Я программировал в течение короткого времени.Я хочу собрать футбольную статистику с веб-сайта totalcorner.com и загрузить ее в файл CSV.Я просто хочу получить столбцы со значениями.Код, который я написал, следующий:

from bs4 import BeautifulSoup
import requests
import csv

url = ("https://www.totalcorner.com/match/schedule/20190305")
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

table = soup.find('table')
rows = table.find_all('tr')
columns =[v.text for v in rows[0].find_all('th')]

for row in soup.find_all('tr'):
for col in row.find_all('td'):
    print(col.text)

Проблема в том, что я получаю все в одном столбце, а не в разных столбцах с разными строками.Я хочу сохранить таблицу в CSV-файле.Как мне это сделать?

Ответы [ 2 ]

2 голосов
/ 06 марта 2019

Pandas - это удобный способ синтаксического анализа тегов <table> (он использует beautifulsoup под капотом).

Обычно вы можете просто сделать pd.read_html(url), но вам нужно будет выполнить запросы на использование здесь.

import pandas as pd
import requests

url = 'https://www.totalcorner.com/match/schedule/20190305'
response = requests.get(url)

tables = pd.read_html(response.text)
table = tables[0]
table = table.dropna(how='all', axis=0)
table = table.dropna(how='all', axis=1)

Вывод:

print (table)
                                         League    ...     Analysis
1                        Mexico Liga MX Femenil    ...     C. O. L.
2                          Argentina Nacional B    ...     C. O. L.
3                   Ecuador Campeonato Nacional    ...     C. O. L.
4                    Argentina Primera Division    ...     C. O. L.
5                         Peru Primera Division    ...     C. O. L.
6                            Colombia Primera A    ...     C. O. L.
7                        Mexico Liga MX Femenil    ...     C. O. L.
8                        Jamaica Premier League    ...     C. O. L.
9                               Mexico Clausura    ...     C. O. L.
10                       Mexico Liga MX Femenil    ...     C. O. L.
11                       Mexico Liga MX Femenil    ...     C. O. L.
12               Bangladesh Championship League    ...     C. O. L.
13                  India Mumbai Super Division    ...     C. O. L.
14                         Womens International    ...     C. O. L.
15                         AFC Champions League    ...     C. O. L.
16                                Indonesia Cup    ...     C. O. L.
17                  India Mumbai Super Division    ...     C. O. L.
18     Australia South Australia State League 1    ...     C. O. L.
19               Bangladesh Championship League    ...     C. O. L.
20    Australia Queensland Premier League Women    ...     C. O. L.
21     Australia South Australia State League 1    ...     C. O. L.
22                         AFC Champions League    ...     C. O. L.
23                             Vietnam V-League    ...     C. O. L.
24                             Vietnam V-League    ...     C. O. L.
25                  India I-League 2nd Division    ...     C. O. L.
26                        World Club Friendlies    ...     C. O. L.
27                         AFC Champions League    ...     C. O. L.
28                         Algeria Youth League    ...     C. O. L.
29                                   Iran Div 2    ...     C. O. L.
30                                   Iran Div 2    ...     C. O. L.
..                                          ...    ...          ...
135               England National League South    ...     C. O. L.
136               England National League South    ...     C. O. L.
137               England National League South    ...     C. O. L.
138     England Southern Premier League Central    ...     C. O. L.
139       England Southern Premier League South    ...     C. O. L.
140       England Southern Premier League South    ...     C. O. L.
141           England Isthmian Premier Division    ...     C. O. L.
142           England Isthmian Premier Division    ...     C. O. L.
143                            England League 1    ...     C. O. L.
144        England Northern League Division One    ...     C. O. L.
145        England Northern League Division One    ...     C. O. L.
146              Republic of Ireland League Cup    ...     C. O. L.
147         England Isthmian Division One North    ...     C. O. L.
148              Republic of Ireland League Cup    ...     C. O. L.
149             Northern Ireland Mid Ulster Cup    ...     C. O. L.
150                       UEFA Champions League    ...     C. O. L.
151                       UEFA Champions League    ...     C. O. L.
152           Argentina Primera B Metropolitana    ...     C. O. L.
153           Argentina Primera C Metropolitana    ...     C. O. L.
154           Argentina Primera D Metropolitana    ...     C. O. L.
155                             Iceland U19 Cup    ...     C. O. L.
156  Republic of Ireland Leinster Senior League    ...     C. O. L.
157      Republic of Ireland Munster Senior Cup    ...     C. O. L.
158                               Argentina Cup    ...     C. O. L.
159                           Copa Libertadores    ...     C. O. L.
160                           Copa Libertadores    ...     C. O. L.
161                           Copa Libertadores    ...     C. O. L.
162                        Womens International    ...     C. O. L.
163           Argentina Torneo Regional Amateur    ...     C. O. L.
164             Mexico Liga de Ascenso Clausura    ...     C. O. L.

[164 rows x 13 columns]
0 голосов
/ 06 марта 2019

Вы можете использовать понимание вложенного списка, чтобы правильно преобразовать таблицу в список списков, который затем можно легко записать в файл CSV:

import csv, requests, re
from bs4 import BeautifulSoup as soup
d = soup(requests.get('https://www.totalcorner.com/match/schedule/20190305').text, 'html.parser')
table = d.find('table', {'id':'inplay_match_table'})
_headers, _data = [i.text for i in table.find_all('th')], [[i.text for i in b.find_all('td')] for b in table.find_all('tr')[1:]]
headers, data = [re.sub('\n+', '', i) for i in _headers if i], [list(filter(None, [re.sub('\n+', '', i) for i in b if i])) for b in _data[2:]]
with open('totalcorner_results.csv', 'w') as f:
  write = csv.writer(f)
  write.writerows([headers, *data])

Вывод (Лучшие восемь результатов из-за ограничения количества символов в SO):

League,Time,Home,Score,Away,Handicap,Corner,Goal Line,Tips,Dangerous Attack,Shots,Live Events,Analysis
Mexico Liga MX Femenil,00:00,Full,1Toluca Women,1 - 1,Club America Women21,+0.5,4 - 4(2-3),2.75 1.25 ,6.7-13.2,81 - 6037 - 33,20 - 811 - 4,C.O.L.
Argentina Nacional B,00:05,Full,3Sarmiento,1 - 1,CD Moron5,-0.75,5 - 3(4-2),2.0 0.75 ,62 - 6232 - 23,11 - 108 - 4,C.O.L.
Ecuador Campeonato Nacional,00:15,Full,[10]Universidad Catolica Del Ecuador,6 - 0,Fuerza Amarilla SC[13]1,-1.25,11 - 0(7-0),2.5 1.25 ,88 - 2243 - 10,23 - 512 - 4,C.O.L.
Argentina Primera Division,00:30,Full,5CA Aldosivi,0 - 1,Defensa y Justicia4,+0.25,3 - 6(1-2),1.75 0.75 ,Corner Over6.6-12.7,82 - 8836 - 46,13 - 96 - 6,C.O.L.
Peru Primera Division,01:00,Full,2[14]Sport Huancayo,0 - 3,Academia Deportiva Cantolao[17]2,-1.25,8 - 2(2-0),2.75 1.0 ,7.3-13.9,106 - 4547 - 19,12 - 56 - 1,C.O.L.
Colombia Primera A,01:00,Full,12Atletico Huila,1 - 2,Alianza Petrolera31,-0.25,3 - 4(1-4),2.0 0.75 ,5.6-12.3,47 - 5017 - 31,6 - 82 - 3,C.O.L.
Mexico Liga MX Femenil,01:00,Full,2Chivas Guadalajara Women,1 - 2,Atlas Women2,-0.25,2 - 2(0-0),2.5 1.0 ,6.1-11.8,49 - 7118 - 32,6 - 143 - 8,C.O.L.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...