42 votes

Comment puis-je gratter un tableau HTML CSV?

Le Problème

J'utilise un outil de travail qui me permet de faire des requêtes et obtenir des tableaux HTML de l'info. Je n'ai pas de type de retour la fin de l'accès.

Beaucoup de cette info serait beaucoup plus utile si je pouvais le mettre dans une feuille de calcul pour le tri, le calcul de la moyenne, etc. Comment puis-je d'écran gratter ces données vers un fichier CSV?

Ma Première Idée

Depuis que je sais jQuery, j'ai pensé que je pourrais l'utiliser pour extraire la forme d'un tableau à l'écran, insérer des virgules et des sauts de ligne, et il suffit de copier la pagaille dans le bloc-notes et enregistrez-la au format CSV. Toutes les meilleures idées?

La Solution

Oui, les gens, c'était vraiment aussi facile que de copier et coller. Ne pas me sentir ridicule.

Plus précisément, quand je l'ai collé dans la feuille de calcul, j'ai dû sélectionner "collage Spécial" et choisissez le format "texte". Sinon, il a essayé de coller le tout dans une seule cellule, même si j'ai mis en évidence l'ensemble de la feuille de calcul.

34voto

mkoeller Points 3101
  • Sélectionnez le tableau HTML dans vos outils de l'INTERFACE utilisateur et le copier dans le presse-papiers (si c'est possible
  • Coller dans Excel.
  • Enregistrer en tant que fichier CSV

Toutefois, ce manuel est une solution non automatisée.

13voto

Thorvaldur Points 166

à l'aide de python:

par exemple, imaginez que vous voulez gratter cotations forex en csv forme à partir de certains sites comme:fxquotes

alors...

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: pour obtenir les valeurs à partir d'une table: exemple: 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)

11voto

Juan A. Navarro Points 1768

C'est ma version de python à l'aide de l' (actuellement la version la plus récente de BeautifulSoup qui peut être obtenu en utilisant, par exemple,

$ sudo easy_install beautifulsoup4

Le script lit le HTML à partir de l'entrée standard, et les sorties au texte de toutes les tables dans le bon format 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([])

5voto

le dorfier Points 27267

Encore plus facile (parce qu'il l'enregistre pour vous, pour la prochaine fois) ...

Dans Excel

Données/Données Externes/Nouvelle Requête Sur Le Web

vous accéderez à une url invite. Entrez votre url, et il permettra de délimiter les tables disponibles sur la page à importer. Le tour est joué.

4voto

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X