Я не знаю, как вы на самом деле работали с библиотекой csv
, но, используя ее метод csvwriter.writerow(row_values)
, вы можете легко записывать данные в файл CSV строка за строкой.
Говоря об использовании pandas
, проблема в вашем коде заключалась в следующей строке:
df= pd.DataFrame(cols, columns=['Dag', 'Dato', 'Hold', 'Resultat', 'Tilskuere', 'Dommer'])
Основная причина - использование переменной 'cols'.Предположим, что в данных вашей таблицы с веб-страницы страницы есть n строк.Теперь ваша переменная 'cols' получает данные, связанные со строкой, итеративно, поэтому после nth итерации она будет содержать только данные строки nth .И, скорее всего, строка nth пуста на странице, на которую вы ссылаетесь.Поэтому ваш фрейм данных был пуст, потому что вы инициализировали ваш фрейм данных с пустым списком.Таким образом, было бы лучше, если бы вы добавляли данные переменной 'cols' в список после каждой итерации.Эта новая переменная (пусть это будет 'row_data'), которая теперь имеет коллекцию списков, может затем использоваться для создания фрейма данных pandas
.
Чтобы поместить эти слова в код, см. Ниже:
Использование csv
библиотеки
import requests
from bs4 import BeautifulSoup
#import pandas as pd
import csv
r = requests.get('https://superstats.dk/program?aar=2018%2F2019')
bs=BeautifulSoup(r.content, "lxml")
#Create a csv.writer object using the csv file you wish to write in
writer = csv.writer(open('sample.csv','w'))
#Use writerow method of the object to write your first row/header contents
writer.writerow(['Dag', 'Dato', 'Hold', 'Resultat', 'Tilskuere', 'Dommer'])
table_div=bs.find(id="content")
rows = table_div.find_all('tr')
for row in rows:
cols=row.find_all('td')
cols=[x.text.strip() for x in cols]
print (cols)
#Some cols are empty, therefore avoid writing them to the file
if len(cols)>0:
#Append all the incoming data row by row
writer.writerow(cols)
#df= pd.DataFrame(cols, columns=['Dag', 'Dato', 'Hold', 'Resultat', 'Tilskuere', 'Dommer'])
#df.to_csv('Superliga.csv', index=none, encoding='utf-8')
Использование pandas
библиотеки
import requests
from bs4 import BeautifulSoup
import pandas as pd
import csv
r = requests.get('https://superstats.dk/program?aar=2018%2F2019')
bs=BeautifulSoup(r.content, "lxml")
#Create an empty list, and use it to append data row by row
row_data = []
table_div=bs.find(id="content")
rows = table_div.find_all('tr')
for row in rows:
cols=row.find_all('td')
cols=[x.text.strip() for x in cols]
#Some cols are empty, therefore avoid adding them to the 'row_data'
if len(cols)>0:
row_data.append(cols[0:6])
#Create a dataframe in one shot using the 'row_data' variable
df = pd.DataFrame(row_data, columns=['Dag', 'Dato', 'Hold', 'Resultat', 'Tilskuere', 'Dommer'])
print(df)
df.to_csv('Superliga.csv', index = None, encoding='utf-8')