我正在使用Python 2.7。 我有一个txt文件,其中包含来自网站的HTML代码。 (不,我不能网页抓取,我必须使用这个txt文件。)
所以,我想从这个页面拆分一个部分,然后发送到xml文件。 我想分开这部分:
<TR>
<td> </td>
<TD class="contentdot" WIDTH="80"> </TD>
<TD class="contentword">
<TABLE BORDER="0" ID="pm" CLASS="tab6col">
<TR>
<TD> </TD>
<TD class="contentword" align="right">
<B>2015. év</B>
</TD>
<TD class="contentword" align="right">
<B>2014. év</B>
</TD>
<TD class="contentword" align="right">
<B>2013. év</B>
</TD>
<TD class="contentword" align="right">
<B>2012. év</B>
</TD>
<TD class="contentword" align="right">
<B>2011. év</B>
</TD>
</TR>
<TR>
<TD class="contentword">
<B>Beszámolási időszak</B>
</TD>
<TD class="contentword" align="right"><span class="pm_idoszak">2015.01.01. - 2015.12.31.</span></TD>
<TD class="contentword" align="right"><span class="pm_idoszak">2014.01.01. - 2014.12.31.</span></TD>
<TD class="contentword" align="right"><span class="pm_idoszak">2013.12.30. - 2013.12.31.</span></TD>
<TD class="contentword" align="right"><span class="pm_idoszak">Nincs adat.</span></TD>
<TD class="contentword" align="right"><span class="pm_idoszak">Nincs adat.</span></TD>
</TR>
<TR>
<TD> </TD>
<TD class="contentword" align="right">eFt</TD>
<TD class="contentword" align="right">eFt</TD>
<TD class="contentword" align="right">eFt</TD>
<TD class="contentword" align="right">eFt</TD>
<TD class="contentword" align="right">eFt</TD>
</TR>
<TR>
<TD class="contentword">Értékesítés nettó árbevétele</TD>
<TD class="numberc" align="right"></TD>
<TD class="numberc" align="right"></TD>
<TD class="numberc" align="right"></TD>
<TD class="numberc" align="right">Nincs adat.</TD>
<TD class="numberc" align="right">Nincs adat.</TD>
</TR>
<TR>
<TD class="contentword">Bevételek</TD>
<TD class="numberc" align="right">2 873 821</TD>
<TD class="numberc" align="right">3 162 742</TD>
<TD class="numberc" align="right">9 194</TD>
<TD class="numberc" align="right"></TD>
<TD class="numberc" align="right"></TD>
</TR>
<TR>
<TD class="contentword">Üzemi eredmény</TD>
<TD class="numberc" align="right">81 937</TD>
<TD class="numberc" align="right">-181 850</TD>
<TD class="numberc" align="right">1 755</TD>
<TD class="numberc" align="right">Nincs adat.</TD>
<TD class="numberc" align="right">Nincs adat.</TD>
</TR>
<TR>
<TD class="contentword">Adózás előtti eredmény</TD>
<TD class="numberc" align="right">-192 778</TD>
<TD class="numberc" align="right">-169 476</TD>
<TD class="numberc" align="right">1 755</TD>
<TD class="numberc" align="right">Nincs adat.</TD>
<TD class="numberc" align="right">Nincs adat.</TD>
</TR>
<TR>
<TD class="contentword">Mérleg szerinti eredmény</TD>
<TD class="numberc" align="right">-124 099</TD>
<TD class="numberc" align="right">0</TD>
<TD class="numberc" align="right">1 421</TD>
<TD class="numberc" align="right">Nincs adat.</TD>
<TD class="numberc" align="right">Nincs adat.</TD>
</TR>
<TR>
<TD class="contentword">Adózott eredmény</TD>
<TD class="numberc" align="right">-192 778</TD>
<TD class="numberc" align="right">-169 476</TD>
<TD class="numberc" align="right">1 579</TD>
<TD class="numberc" align="right">Nincs adat.</TD>
<TD class="numberc" align="right">Nincs adat.</TD>
</TR>
<TR>
<TD class="contentword">Eszközök összesen</TD>
<TD class="numberc" align="right">37 820 881</TD>
<TD class="numberc" align="right">40 695 842</TD>
<TD class="numberc" align="right">36 992 091</TD>
<TD class="numberc" align="right">Nincs adat.</TD>
<TD class="numberc" align="right">Nincs adat.</TD>
</TR>
<TR>
<TD class="contentword">Befektetett eszközök</TD>
<TD class="numberc" align="right">18 668 826</TD>
<TD class="numberc" align="right">18 525 063</TD>
<TD class="numberc" align="right">16 925 711</TD>
<TD class="numberc" align="right">Nincs adat.</TD>
<TD class="numberc" align="right">Nincs adat.</TD>
</TR>
<TR>
<TD class="contentword">Forgóeszközök</TD>
<TD class="numberc" align="right">19 008 587</TD>
<TD class="numberc" align="right">21 877 275</TD>
<TD class="numberc" align="right">19 792 420</TD>
<TD class="numberc" align="right">Nincs adat.</TD>
<TD class="numberc" align="right">Nincs adat.</TD>
</TR>
<TR>
<TD class="contentword">Pénzeszközök</TD>
<TD class="numberc" align="right">947 015</TD>
<TD class="numberc" align="right">1 056 101</TD>
<TD class="numberc" align="right">1 307 515</TD>
<TD class="numberc" align="right">Nincs adat.</TD>
<TD class="numberc" align="right">Nincs adat.</TD>
</TR>
<TR>
<TD class="contentword">Aktív időbeli elhatárolások</TD>
<TD class="numberc" align="right">143 468</TD>
<TD class="numberc" align="right">293 504</TD>
<TD class="numberc" align="right">273 960</TD>
<TD class="numberc" align="right">Nincs adat.</TD>
<TD class="numberc" align="right">Nincs adat.</TD>
</TR>
<TR>
<TD class="contentword">Saját tőke</TD>
<TD class="numberc" align="right">2 141 319</TD>
<TD class="numberc" align="right">2 184 079</TD>
<TD class="numberc" align="right">2 353 554</TD>
<TD class="numberc" align="right">Nincs adat.</TD>
<TD class="numberc" align="right">Nincs adat.</TD>
</TR>
<TR>
<TD class="contentword">Céltartalékok</TD>
<TD class="numberc" align="right">29 656</TD>
<TD class="numberc" align="right">148 652</TD>
<TD class="numberc" align="right">18 960</TD>
<TD class="numberc" align="right">Nincs adat.</TD>
<TD class="numberc" align="right">Nincs adat.</TD>
</TR>
<TR>
<TD class="contentword">Kötelezettségek</TD>
<TD class="numberc" align="right">35 541 531</TD>
<TD class="numberc" align="right">38 059 399</TD>
<TD class="numberc" align="right">34 233 518</TD>
<TD class="numberc" align="right">Nincs adat.</TD>
<TD class="numberc" align="right">Nincs adat.</TD>
</TR>
<TR>
<TD class="contentword">Rövid lejáratú kötelezettségek</TD>
<TD class="numberc" align="right">30 519 491</TD>
<TD class="numberc" align="right">30 426 014</TD>
<TD class="numberc" align="right">26 394 088</TD>
<TD class="numberc" align="right">Nincs adat.</TD>
<TD class="numberc" align="right">Nincs adat.</TD>
</TR>
<TR>
<TD class="contentword">Hosszú lejáratú kötelezettségek</TD>
<TD class="numberc" align="right">5 022 040</TD>
<TD class="numberc" align="right">7 633 385</TD>
<TD class="numberc" align="right">7 839 430</TD>
<TD class="numberc" align="right">Nincs adat.</TD>
<TD class="numberc" align="right">Nincs adat.</TD>
</TR>
<TR>
<TD class="contentword">Passzív időbeli elhatárolások</TD>
<TD class="numberc" align="right">108 375</TD>
<TD class="numberc" align="right">303 712</TD>
<TD class="numberc" align="right">386 059</TD>
<TD class="numberc" align="right">Nincs adat.</TD>
<TD class="numberc" align="right">Nincs adat.</TD>
</TR>
<TR>
<TD class="contentword" colspan="6">
<B>Pénzügyi mutatók</B>
</TD>
</TR>
<TR>
<TD class="contentword">Eladósodottság foka <span style="cursor: pointer; color: red; font-family: InformationLogo, Webdings;" onmouseover="show_hint(this, '<span style="color: red; font-weight: bold;">Eladósodottság foka</span> (Kötelezettségek/Eszközök összesen)<br><i>Megmutatja, hogy az eszköz állomány milyen mértékben van megterhelve kötelezettségvállalással. Minél kisebb a mutató értéke, annál jobb a cég megítélése.</i>');"
onmouseout="remove_hint();">i</span></TD>
<TD class="numberc" align="right"></TD>
<TD class="numberc" align="right"></TD>
<TD class="numberc" align="right"></TD>
<TD class="numberc" align="right">Nincs adat.</TD>
<TD class="numberc" align="right">Nincs adat.</TD>
</TR>
<TR>
<TD class="contentword">Eladósodottság mértéke - Bonitás <span style="cursor: pointer; color: red; font-family: InformationLogo, Webdings;" onmouseover="show_hint(this, '<span style="color: red; font-weight: bold;">Eladósodottság mértéke - Bonitás</span> (Kötelezettségek/Saját tőke)<br><i>Azt mutatja, hogy a saját források a kötelezettségek hány százalékát fedezik. Pozitív a cég megítélése, ha a mutató értéke tartósan (jóval) 1 alatt van.</i>');"
onmouseout="remove_hint();">i</span></TD>
<TD class="numberc" align="right"></TD>
<TD class="numberc" align="right"></TD>
<TD class="numberc" align="right"></TD>
<TD class="numberc" align="right">Nincs adat.</TD>
<TD class="numberc" align="right">Nincs adat.</TD>
</TR>
<TR>
<TD class="contentword">Árbevétel arányos eredmény % <span style="cursor: pointer; color: red; font-family: InformationLogo, Webdings;" onmouseover="show_hint(this, '<span style="color: red; font-weight: bold;">Árbevétel arányos eredmény %</span> (Adózott eredmény/ Nettó árbevétel)×100<br><i>A mutató az árbevétel hatékonyságát fejezi ki úgy, hogy az árbevétel nyereségtartalmát százalékban szemlélteti. A cég megítélése annál pozitívabb, minél magasabb a százalék.</i>');"
onmouseout="remove_hint();">i</span></TD>
<TD class="numberc" align="right"></TD>
<TD class="numberc" align="right"></TD>
<TD class="numberc" align="right"></TD>
<TD class="numberc" align="right">Nincs adat.</TD>
<TD class="numberc" align="right">Nincs adat.</TD>
</TR>
<TR>
<TD class="contentword">Likviditási gyorsráta <span style="cursor: pointer; color: red; font-family: InformationLogo, Webdings;" onmouseover="show_hint(this, '<span style="color: red; font-weight: bold;">Likviditási gyorsráta</span> ((Forgóeszközök-Készletek)/Rövid lej.kötelezettségek)<br><i>Azt fejezi ki, hogy az egy év alatt pénzzé tehető készletek nélküli forgóeszközök milyen arányban képesek az egy éven belül esedékes kötelezettségek fedezésére, azaz milyen a cég rövid távú fizetőképessége.<br>A cég megítélése akkor pozitív, ha ez az arány egyre növekvő, ami az azonnali fizetőképesség javulását jelzi.</i>');"
onmouseout="remove_hint();">i</span></TD>
<TD class="numberc" align="right"></TD>
<TD class="numberc" align="right"></TD>
<TD class="numberc" align="right"></TD>
<TD class="numberc" align="right">Nincs adat.</TD>
<TD class="numberc" align="right">Nincs adat.</TD>
</TR>
<TR>
<TD class="contentword">Saját tőke aránya <span style="cursor: pointer; color: red; font-family: InformationLogo, Webdings;" onmouseover="show_hint(this, '<span style="color: red; font-weight: bold;">Saját tőke aránya </span> (Saját tőke / Források)');"
onmouseout="remove_hint();">i</span></TD>
<TD class="numberc" align="right">0,06</TD>
<TD class="numberc" align="right">0,05</TD>
<TD class="numberc" align="right">0,06</TD>
<TD class="numberc" align="right"></TD>
<TD class="numberc" align="right"></TD>
</TR>
<TR>
<TD class="contentword">Eszközarányos nyereség <span style="cursor: pointer; color: red; font-family: InformationLogo, Webdings;" onmouseover="show_hint(this, '<span style="color: red; font-weight: bold;">Eszközarányos nyereség </span> (Adózott eredmény / Eszközök)');"
onmouseout="remove_hint();">i</span></TD>
<TD class="numberc" align="right">-0,01</TD>
<TD class="numberc" align="right">0,00</TD>
<TD class="numberc" align="right">0,00</TD>
<TD class="numberc" align="right"></TD>
<TD class="numberc" align="right"></TD>
</TR>
<TR>
<TD class="contentword">Bevételarányos eredmény <span style="cursor: pointer; color: red; font-family: InformationLogo, Webdings;" onmouseover="show_hint(this, '<span style="color: red; font-weight: bold;">Bevételarányos eredmény </span> (Adózott eredmény / Bevételek)');"
onmouseout="remove_hint();">i</span></TD>
<TD class="numberc" align="right">-0,07</TD>
<TD class="numberc" align="right">-0,05</TD>
<TD class="numberc" align="right">0,17</TD>
<TD class="numberc" align="right"></TD>
<TD class="numberc" align="right"></TD>
</TR>
<TR>
<TD class="contentword">Saját tőke arányos nyereség <span style="cursor: pointer; color: red; font-family: InformationLogo, Webdings;" onmouseover="show_hint(this, '<span style="color: red; font-weight: bold;">Saját tőke arányos nyereség </span> (Adózott eredmény / Saját tőke)');"
onmouseout="remove_hint();">i</span></TD>
<TD class="numberc" align="right">-0,09</TD>
<TD class="numberc" align="right">-0,08</TD>
<TD class="numberc" align="right">0,00</TD>
<TD class="numberc" align="right"></TD>
<TD class="numberc" align="right"></TD>
</TR>
<TR>
<TD class="contentword" colspan="6">
<B>Létszám:</B> 136 fő</TD>
</TR>
</TABLE>
<!-- 1 -->
&#13;
这是六列,并且很多行。 我怎样才能将这些信息分成细胞?
我试过这个:
import urllib2
import unicodecsv as csv
import os
import sys
import io
import time
import datetime
import pandas as pd
filename=r'output.csv'
resultcsv=open(filename,"wb")
output=csv.writer(resultcsv, delimiter=';',quotechar = '"', quoting=csv.QUOTE_NONNUMERIC, encoding='latin-1')
f = open('opten2.txt', 'r')
x = f.readlines()
datatable=[]
for record in x.findAll('tr'):
for data in record.findAll('td'):
datatable.append(data.text)
maindatatable = to_2d(datatable, 6)
output.writerows(maindatatable)
resultcsv.close()
&#13;
但是这个txt中有一个tr和td的lof,我怎么能把这个分成我想要的? (我上面发布的内容)如何修复我的代码才能成功运行? (我现在才开始编码。^^)
答案 0 :(得分:1)
您可以使用BeautifulSoup
并使用类{ "class" : "tab6col" }
调用findAll,如下所示:
import urllib2
import unicodecsv as csv
import os
import sys
import io
import time
import datetime
import pandas as pd
from bs4 import BeautifulSoup
def to_2d(l,n):
return [l[i:i+n] for i in range(0, len(l), n)]
filename=r'output.csv'
resultcsv=open(filename,"wb")
output=csv.writer(resultcsv, delimiter=';',quotechar = '"', quoting=csv.QUOTE_NONNUMERIC, encoding='latin-1')
f = open('f.xml', 'r')
x = f.read()
soup = BeautifulSoup(x)
tab6col = soup.findAll('table', { "class" : "tab6col" })
datatable=[]
for record in tab6col[0].findAll('tr'):
for data in record.findAll('td'):
datatable.append(data.text.encode('utf-8').decode('latin-1'))
maindatatable = to_2d(datatable, 6)
print maindatatable
output.writerows(maindatatable)
resultcsv.close()
答案 1 :(得分:0)
你实际上在进行 html解析。我建议使用html解析库,例如the built-in one。这应该比你自己做的更容易,更健壮。