Ответ 1
- Выберите таблицу HTML в пользовательском интерфейсе инструментов и скопируйте ее в буфер обмена (если это возможно
- Вставьте его в Excel.
- Сохранить как файл CSV
Однако это ручное решение не автоматическое.
Я использую инструмент на работе, который позволяет мне делать запросы и возвращать HTML-таблицы информации. У меня нет никакого доступа к нему.
Большая часть этой информации была бы намного более полезной, если бы я мог помещать ее в таблицу для сортировки, усреднения и т.д. Как я могу очистить эти данные до CSV файла?
Поскольку я знаю jQuery, я думал, что могу использовать его, чтобы вырезать форматирование таблицы на экране, вставить запятые и разрывы строк, а просто скопировать весь беспорядок в блокнот и сохранить в виде CSV. Любые лучшие идеи?
Да, ребята, это было так же просто, как копировать и вставлять. Не чувствую себя глупо.
В частности, когда я вставил в таблицу, мне пришлось выбрать "Вставить специальный" и выбрать формат "текст". В противном случае он попытался вставить все в одну ячейку, даже если я выделил всю электронную таблицу.
Однако это ручное решение не автоматическое.
с использованием python:
Например, представьте, что вы хотите очистить котировки forex в форме csv с какого-либо сайта, например: fxquotes
то...
from BeautifulSoup import BeautifulSoup
import urllib,string,csv,sys,os
from string import replace
date_s = '&date1=01/01/08'
date_f = '&date=11/10/08'
fx_url = 'http://www.oanda.com/convert/fxhistory?date_fmt=us'
fx_url_end = '&lang=en&margin_fixed=0&format=CSV&redirected=1'
cur1,cur2 = 'USD','AUD'
fx_url = fx_url + date_f + date_s + '&exch=' + cur1 +'&exch2=' + cur1
fx_url = fx_url +'&expr=' + cur2 + '&expr2=' + cur2 + fx_url_end
data = urllib.urlopen(fx_url).read()
soup = BeautifulSoup(data)
data = str(soup.findAll('pre', limit=1))
data = replace(data,'[<pre>','')
data = replace(data,'</pre>]','')
file_location = '/Users/location_edit_this'
file_name = file_location + 'usd_aus.csv'
file = open(file_name,"w")
file.write(data)
file.close()
edit: чтобы получить значения из таблицы: пример из: palewire
from mechanize import Browser
from BeautifulSoup import BeautifulSoup
mech = Browser()
url = "http://www.palewire.com/scrape/albums/2007.html"
page = mech.open(url)
html = page.read()
soup = BeautifulSoup(html)
table = soup.find("table", border=1)
for row in table.findAll('tr')[1:]:
col = row.findAll('td')
rank = col[0].string
artist = col[1].string
album = col[2].string
cover_link = col[3].img['src']
record = (rank, artist, album, cover_link)
print "|".join(record)
Это моя версия python с использованием (в настоящее время) последней версии BeautifulSoup, которую можно получить, используя, например,
$ sudo easy_install beautifulsoup4
script считывает HTML со стандартного ввода и выводит текст, найденный во всех таблицах, в надлежащем формате CSV.
#!/usr/bin/python
from bs4 import BeautifulSoup
import sys
import re
import csv
def cell_text(cell):
return " ".join(cell.stripped_strings)
soup = BeautifulSoup(sys.stdin.read())
output = csv.writer(sys.stdout)
for table in soup.find_all('table'):
for row in table.find_all('tr'):
col = map(cell_text, row.find_all(re.compile('t[dh]')))
output.writerow(col)
output.writerow([])
Еще проще (потому что он сохранит его для вас в следующий раз)...
В Excel
Данные/Импорт внешних данных/Новый веб-запрос
приведет вас к приглашению url. Введите свой URL-адрес и разделите доступные таблицы на странице для импорта. Вуаля.
Приходят в голову два способа (особенно для тех из нас, у которых нет Excel):
importHTML
:
=importHTML("http://example.com/page/with/table", "table", index
copy
и paste values
вскоре после импортаread_html
и to_csv
Быстрая и грязная:
Скопировать из браузера в Excel, сохранить как CSV.
Лучшее решение (для долгосрочного использования):
Напишите немного кода на выбранном вами языке, который вытащит содержимое html и очистит нужные вам биты. Вероятно, вы могли бы сбросить все операции с данными (сортировка, усреднение и т.д.) Поверх данных. Таким образом, вам просто нужно запустить свой код, и вы получите фактический отчет, который вы хотите.
Все зависит от того, как часто вы будете выполнять эту конкретную задачу.
Excel может открыть страницу http.
Например:
Нажмите "Файл", "Открыть"
Под именем файла вставьте URL-адрес, т.е.: Как я могу скопировать таблицу HTML в CSV?
Нажмите ok
Excel делает все возможное, чтобы преобразовать html в таблицу.
Это не самое элегантное решение, но оно работает!
Основная реализация Python с использованием BeautifulSoup, также учитывая как rowspan, так и colspan:
from BeautifulSoup import BeautifulSoup
def table2csv(html_txt):
csvs = []
soup = BeautifulSoup(html_txt)
tables = soup.findAll('table')
for table in tables:
csv = ''
rows = table.findAll('tr')
row_spans = []
do_ident = False
for tr in rows:
cols = tr.findAll(['th','td'])
for cell in cols:
colspan = int(cell.get('colspan',1))
rowspan = int(cell.get('rowspan',1))
if do_ident:
do_ident = False
csv += ','*(len(row_spans))
if rowspan > 1: row_spans.append(rowspan)
csv += '"{text}"'.format(text=cell.text) + ','*(colspan)
if row_spans:
for i in xrange(len(row_spans)-1,-1,-1):
row_spans[i] -= 1
if row_spans[i] < 1: row_spans.pop()
do_ident = True if row_spans else False
csv += '\n'
csvs.append(csv)
#print csv
return '\n\n'.join(csvs)
Вот пример проверенный, который объединяет grequest и суп для загрузки большого количества страниц со структурированного веб-сайта:
#!/usr/bin/python
from bs4 import BeautifulSoup
import sys
import re
import csv
import grequests
import time
def cell_text(cell):
return " ".join(cell.stripped_strings)
def parse_table(body_html):
soup = BeautifulSoup(body_html)
for table in soup.find_all('table'):
for row in table.find_all('tr'):
col = map(cell_text, row.find_all(re.compile('t[dh]')))
print(col)
def process_a_page(response, *args, **kwargs):
parse_table(response.content)
def download_a_chunk(k):
chunk_size = 10 #number of html pages
x = "http://www.blahblah....com/inclusiones.php?p="
x2 = "&name=..."
URLS = [x+str(i)+x2 for i in range(k*chunk_size, k*(chunk_size+1)) ]
reqs = [grequests.get(url, hooks={'response': process_a_page}) for url in URLS]
resp = grequests.map(reqs, size=10)
# download slowly so the server does not block you
for k in range(0,500):
print("downloading chunk ",str(k))
download_a_chunk(k)
time.sleep(11)
Вы пытались открыть его с помощью excel? Если вы сохраните таблицу в excel как html, вы увидите формат Excel. Из веб-приложения, которое я написал, я выплюнул этот формат html, чтобы пользователь мог экспортировать его в excel.
Если вы очищаете экран, а таблица, которую вы пытаетесь преобразовать, имеет заданный идентификатор, вы всегда можете выполнить синтаксический анализ hgml вместе с некоторыми скриптами для создания CSV.