2014-02-25 2 views
1

im пытается конвертировать файл с таблицей HTML в формат CSV. Отрывок из этого файла следующим образом:Преобразование таблицы HTML в CSV-файл из оболочки

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

    <html xmlns="http://www.w3.org/1999/xhtml" > 
    <head id="Head1"><link rel="shortcut icon" href="favicon.ico" /><title> 
Untitled Page 
    </title></head> 
    <body> 
     <form name="form1" method="post" action="mypricelist.aspx" id="form1"> 
    <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/somethingrandom" /> 

<div> 
    <table id="price_list" border="0"> 
<tr> 
    <td>ProdCode</td><td>Description</td><td>Your Price</td> 
</tr><tr> 
    <td>ab101</td><td>loruem</td><td>1.1</td> 
</tr><tr> 
    <td>ab102</td><td>ipsum</td><td>0.1</td> 
</tr><tr> 

я попытался с помощью

xls2csv -x -c\; evprice.xls > evprice.csv 

, но это дает мне ошибку говоря

evprice.xls is not OLE file or Error 

Я гугле. он сказал, что это потому, что файл был не соответствующим xls, а просто html.

Когда я пытаюсь

file evprice.xls 

его говорит, что его HTML так нашел 'решение', с помощью LibreOffice.

libreoffice --headless -convert-to csv ./evprice.xls 

ну это не дает ошибку, но выходной файл CSV все странен, как открытие файла ех в блокноте.

содержит много странных персонажей, как эти

—¬ž­þ9ü~ÆóXþK¢ 

Кто-нибудь знает, почему это происходит, и получил рабочее решение?

+0

ли данные выборки вы работаете с общедоступными? Я не знаю, как кто-нибудь сможет предоставить что-то, что будет работать с файлом в неопределенном формате, содержимое которого мы никогда не видели. –

+0

извините, его не публично. я могу поместить часть файла –

+0

добавил файл xls. –

ответ

1

Я создал утилиту Python, которая преобразует все таблицы в файл HTML в отдельные файлы CSV.

Это может быть here.

Суть сценария заключается в следующем:

from BeautifulSoup import BeautifulSoup 
import csv 

filename = "MY_HTML_FILE" 
fin  = open(filename,'r') 

print "Opening file" 
fin = fin.read() 

print "Parsing file" 
soup = BeautifulSoup(fin,convertEntities=BeautifulSoup.HTML_ENTITIES) 

print "Preemptively removing unnecessary tags" 
[s.extract() for s in soup('script')] 

print "CSVing file" 
tablecount = -1 
for table in soup.findAll("table"): 
    tablecount += 1 
    print "Processing Table #%d" % (tablecount) 
    with open(sys.argv[1]+str(tablecount)+'.csv', 'wb') as csvfile: 
    fout = csv.writer(csvfile, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL) 
    for row in table.findAll('tr'): 
     cols = row.findAll(['td','th']) 
     if cols: 
     cols = [x.text for x in cols] 
     fout.writerow(cols) 
+0

Очень полезно. Я столкнулся с некоторыми ошибками, как в ** «UnicodeEncodeError: кодек ascii не может кодировать символ при специальном имени ...» **; однако я мог бы исправить это, добавив эти строки в начало файла: 'import sys; перезагрузить sys; sys.setdefaultencoding ('UTF-8') '. Принятый ответ на этот вопрос (https://stackoverflow.com/questions/31137552/unicodeencodeerror-ascii-codec-cant-encode-character-at-special-name/31137935#31137935) - это то, что я на самом деле делал и предлагаю в этом комментарии. –

 Смежные вопросы

  • Нет связанных вопросов^_^