Создание таблиц CSV из веб-таблиц, приобретенных через BeautifulSoup - PullRequest
0 голосов
/ 26 февраля 2020

Я пытаюсь разобрать вторую таблицу с этого сайта (https://blog.prepscholar.com/act-to-sat-conversion) и вывести ее в виде файла CSV. Я не мог записать вывод в CSV, поэтому я попытался создать строки для каждой строки, а затем составил список для записи в CSV, но мне не удалось. Не могли бы вы помочь мне? Большое спасибо!

Это мой код:

import csv
from urllib.request import urlopen
from bs4 import BeautifulSoup
tpage1 = 'https://blog.prepscholar.com/act-to-sat-conversion'
hpage = urlopen(tpage1)
bs = BeautifulSoup(hpage, 'html.parser')

for h1 in bs.find_all('h1'):
    print(h1.get_text())
table = bs.find_all('table')[1]
rows = table.find_all('tr')
headers = table.find_all('th')
rownum = 0

for row in rows:
    rownum += 1
    cellnum = 0

    new_row = ''
    for cell in row.find_all(['td','th']):
        cellnum += 1

        print(rownum, cellnum, cell.get_text())

Этот код дает мне вывод (фрагмент ниже)

SAT / ACT Prep Online Guides and Tips
1 1 ACT Composite Score
1 2 Estimated SAT Composite
1 3 Estimated SAT Composite Range
2 1 36
2 2 2390
2 3 2320-2400
3 1 35
3 2 2260
3 3 2320-2310
4 1 34
4 2 2170
4 3 2140-2220

Как можно Я изменяю это, чтобы иметь возможность выводить в CSV?

1 Ответ

0 голосов
/ 26 февраля 2020

Использование pandas

import pandas as pd

all_tables = pd.read_html('https://blog.prepscholar.com/act-to-sat-conversion')
all_tables[0].to_csv("output1.csv")
all_tables[1].to_csv("output2.csv") 

С BeautifulSoup потребуется больше работы.

import csv
from urllib.request import urlopen
from bs4 import BeautifulSoup

url = 'https://blog.prepscholar.com/act-to-sat-conversion'

html = urlopen(url)
soup = BeautifulSoup(html, 'html.parser')

table = soup.find_all('table')[1]

fh = open('output.csv', 'w')
cvs_writer = csv.writer(fh)

all_data = []
rows = table.find_all('tr')
for row in rows:
    cells = row.find_all(['td','th'])
    row_data = []
    for cell in cells:
        row_data.append(cell.get_text())
    all_data.append(row_data)
    cvs_writer.writerow(row_data)

print(all_data)
fh.close()

Немного короче с пониманием списка и без сохранения данных в all_data

import csv
from urllib.request import urlopen
from bs4 import BeautifulSoup

url = 'https://blog.prepscholar.com/act-to-sat-conversion'

html = urlopen(url)
soup = BeautifulSoup(html, 'html.parser')

table = soup.find_all('table')[1]

fh = open('output.csv', 'w')
cvs_writer = csv.writer(fh)

for row in table.find_all('tr'):
    row_data = [cell.get_text() for cell in row.find_all(['td','th'])]
    cvs_writer.writerow(row_data)

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