我希望仅使用标准的Python HTML Parser从HTML表中抓取数据。我需要坚持使用库存工具,因为代码将被广泛分发,我不能花时间来支持那些需要安装BeautifulSoup,lxlml等的人。
例如,HTML代码:
<table id="indexlist">
<tbody>
<tr class="indexhead">
<th class="indexcolicon">
<img src="/icons/blank.gif" alt="[ICO]">
</th>
<th class="indexcolname">
<a href="?C=N;O=D">Name
</a>
</th>
<th class="indexcollastmod">
<a href="?C=M;O=A">Last modified
</a>
</th>
<th class="indexcolsize">
<a href="?C=S;O=A">Size
</a>
</th>
</tr>
<tr class="parent">
<td class="indexcolicon">
<a href="/pub/DATASETS/nsidc0081_nrt_nasateam_seaice/browse/">
<img src="/icons/back.gif" alt="[PARENTDIR]">
</a>
</td>
<td class="indexcolname">
<a href="/pub/DATASETS/nsidc0081_nrt_nasateam_seaice/browse/">Parent Directory
</a>
</td>
<td class="indexcollastmod">
</td>
<td class="indexcolsize"> -
</td>
</tr>
<tr class="odd">
<td class="indexcolicon">
<a href="nt_20150101_f17_nrt_n.png">
<img src="/icons/image2.gif" alt="[IMG]">
</a>
</td>
<td class="indexcolname">
<a href="nt_20150101_f17_nrt_n.png">
nt_20150101_f17_nrt_n.png
</a>
</td>
<td class="indexcollastmod">
2015-03-10 11:25
</td>
<td class="indexcolsize"> 56K
</td>
</tr>
<tr class="even">
<td class="indexcolicon">
<a href="nt_20150102_f17_nrt_n.png">
<img src="/icons/image2.gif" alt="[IMG]">
</a>
</td>
<td class="indexcolname">
<a href="nt_20150102_f17_nrt_n.png">
nt_20150102_f17_nrt_n.png
</a>
</td>
.
.
.
&#13;
我希望能够提取数据&#39;在此表中。更具体地说,数据将是以* .png结尾的所有属性值。它们与表中的数据具有相同的名称。我不想明确声明我想要刮掉* .png文件,因为我想在不同的目录中使用这个代码,这些目录将具有不同的文件格式。我尝试过一些代码尝试使用名称&#39; href&#39;来提取所有属性的值,但这也会返回HTML正文中的许多其他属性。仅刮取数据也会返回一些不属于表的实例。例如:
class MyHTMLParser(HTMLParser):
def __init__(self):
HTMLParser.__init__(self)
self.inLink = False
self.dataArray = []
def handle_starttag(self, tag, attrs):
self.inLink = False
if tag == 'a':
for name, value in attrs:
if name == 'href':
self.inLink = True
self.lasttag = tag
def handle_data(self, data):
if self.lasttag == 'a' and self.inLink and data.strip():
self.dataArray.append(data)
但是,这将返回以下内容:
nt_20170119_f18_nrt_n.png
nt_20170120_f18_nrt_n.png
nt_20170121_f18_nrt_n.png
nt_20170122_f18_nrt_n.png
Home
|
Contact Us
因为还有一些&#39; a&#39;生活在HTML表格之外的标签。是否有人使用标准HTML解析方法从表中提取数据或href值?
答案 0 :(得分:0)
class MyHTMLParser(HTMLParser):
def __init__(self):
HTMLParser.__init__(self)
self.inLink = False
self.dataList = []
self.directory = '/'
self.indexcol = ';'
self.Counter = 0
def handle_starttag(self, tag, attrs):
self.inLink = False
if tag == 'table':
self.Counter += 1
if tag == 'a':
for name, value in attrs:
if name == 'href':
if self.directory in value or self.indexcol in value:
break
else:
self.inLink = True
self.lasttag = tag
def handle_endtag(self, tag):
if tag == 'table':
self.Counter +=1
def handle_data(self, data):
if self.Counter == 1:
if self.lasttag == 'a' and self.inLink and data.strip():
self.dataList.append(data)
parser = MyHTMLParser()