Domanda Come posso raschiare una tabella HTML in CSV?


Il problema

Uso uno strumento al lavoro che mi consente di eseguire query e recuperare le tabelle HTML di informazioni. Non ho alcun tipo di accesso back-end ad esso.

Molte di queste informazioni sarebbero molto più utili se potessi inserirle in un foglio di calcolo per l'ordinamento, la media, ecc. Come posso analizzare questi dati su un file CSV?

La mia prima idea

Dal momento che conosco jQuery, ho pensato che avrei potuto usarlo per rimuovere la formattazione del tavolo sullo schermo, inserire virgole e interruzioni di riga, e copiare l'intero mess nel blocco note e salvarlo come CSV. Qualche idea migliore?

La soluzione

Sì, gente, era davvero facile come copiare e incollare. Non mi sento sciocco.

Nello specifico, quando ho incollato il foglio di calcolo, ho dovuto selezionare "Incolla speciale" e scegliere il formato "testo". Altrimenti ha cercato di incollare tutto in una singola cella, anche se ho evidenziato l'intero foglio di calcolo.


38
2017-11-03 16:00


origine


risposte:


  • Seleziona la tabella HTML nell'interfaccia utente dei tuoi strumenti e copiala negli appunti (se possibile
  • Incollalo in Excel.
  • Salva come file CSV

Tuttavia, questa è una soluzione manuale non automatizzata.


32
2017-11-03 16:03



usando python:

per esempio immagina di voler racchiudere le citazioni forex in forma csv da qualche sito come:fxquotes

poi...

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()

modifica: per ottenere valori da una tabella: esempio da: 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)

12
2017-11-11 01:17



Questa è la mia versione python che utilizza l'ultima versione (attualmente) di BeautifulSoup che può essere ottenuta usando, ad esempio,

$ sudo easy_install beautifulsoup4

Lo script legge l'HTML dallo standard input e restituisce il testo trovato in tutte le tabelle nel formato CSV appropriato.

#!/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([])

10
2018-05-22 17:11



Ancora più semplice (perché lo salva per te la prossima volta) ...

In Excel

Dati / Importa dati esterni / Nuova query Web

ti porterà al prompt di un url. Inserisci l'url e delimiterà le tabelle disponibili nella pagina da importare. Ecco.


5
2017-11-11 03:04



Mi vengono in mente due modi (specialmente per quelli di noi che non hanno Excel):

  • Google Spreadsheets ha un eccellente importHTML funzione:
    • =importHTML("http://example.com/page/with/table", "table", index
    • L'indice inizia alle 1
    • Raccomando a copy e paste values poco dopo l'importazione
    • File -> Scarica come -> CSV
  • Python è superbo Pandas la biblioteca è a portata di mano read_html e to_csv funzioni

3
2018-01-22 07:37



Veloce e sporco:

Copia fuori dal browser in Excel, salva come CSV.

Soluzione migliore (per uso a lungo termine):

Scrivi un po 'di codice nella lingua di tua scelta che tiri giù il contenuto del codice HTML e raschia i bit che vuoi. Potresti probabilmente inserire tutte le operazioni sui dati (ordinamento, calcolo della media, ecc.) Sopra il recupero dei dati. In questo modo, devi solo eseguire il codice e ottenere il report che si desidera.

Tutto dipende da quanto spesso svolgerete questa particolare attività.


2
2017-11-03 16:09



Excel può aprire una pagina http.

Per esempio:

  1. Fare clic su File, Apri

  2. Sotto nomefile, incolla l'URL es: Come posso raschiare una tabella HTML in CSV?

  3. Clicca ok

Excel fa del suo meglio per convertire l'html in una tabella.

Non è la soluzione più elegante, ma funziona!


2
2017-11-11 01:25