очистить все таблицы от веб-страницы с красивым супом и сконденсировать в один CSV-файл - PullRequest
0 голосов
/ 31 января 2020

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

import bs4 as bs
import urllib.request
from requests import get
import pandas as pd
from csv import writer
url = 'https://www.vegasinsider.com/college-basketball/scoreboard/scores.cfm/game_date/01-12-2020'
source = urllib.request.urlopen(url)
soup = bs.BeautifulSoup(source, 'lxml')
tables = soup.find_all('table', attrs={'class':'sportPicksBorder'})
for num, table in enumerate(tables, start=1):
    filename = 'C:\\Users\\MyName\\Documents/table-%d.csv' % num
    with open(filename, 'w')as f:
        data = []
        csv_writer = writer(f)
        rows = table.find_all('tr')
        for row in rows:
            headers = row.find_all('th')
            if headers:
                csv_writer.writerow([header.text.strip()for header in headers])
            columns = row.find_all('td')
            csv_writer.writerow([column.text.strip() for column in columns])

1 Ответ

1 голос
/ 31 января 2020

Вы можете достичь этого, переместив «писатель» за пределы для l oop:

import bs4 as bs
import urllib.request
from requests import get
import pandas as pd
from csv import writer
url = 'https://www.vegasinsider.com/college-basketball/scoreboard/scores.cfm/game_date/01-12-2020'
source = urllib.request.urlopen(url)
soup = bs.BeautifulSoup(source, 'lxml')
tables = soup.find_all('table', attrs={'class': 'sportPicksBorder'})
filename = 'C:\\Users\\MyName\\Documents\\tables.csv'
with open(filename, 'w')as f:
    data = []
    csv_writer = writer(f)
    for table in tables:
        rows = table.find_all('tr')
        for row in rows:
            columns = row.find_all('td')
            csv_writer.writerow([column.text.strip() for column in columns])

Это записывает все в одном файле CSV, но данные немного запутанны и по-прежнему требуют очистки. Я не могу понять, как ваш исходный код очистил бы его больше, хотя, когда я загружаю эту веб-страницу, там нет th-тегов, все это tr / td. Кроме того, я сделал это на Ma c, поэтому я не уверен, правильно ли отформатирован этот путь к файлу для tables.csv.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...