標準のPython HTMLパーサーのみを使用してHTMLテーブルからデータをスクレイプします。私はコードが広く配布され、私はBeautifulSoupをインストールするために必要とする人々を支援するための時間を取ることができないので、株価のツールに固執する必要があり、lxlmlなど標準のPython HTMLパーサーを使用したHTMLテーブルのスクラブ
例えば、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>
.
.
.
この表の中の「データ」を抽出できます。具体的には、データは* .pngで終わるすべての属性値になります。これらは、表内のデータと同じ名前を共有します。 * .pngファイルをスクレープしたいと明示的に宣言したくないのは、異なるファイル形式を持つ異なるディレクトリでこのコードを使用したいからです。私は 'href'という名前ですべての属性の値を抽出しようとするいくつかのコードを試しましたが、これは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
HTMLテーブル外に住む少数「」タグもあるので。誰かが、標準のHTML解析メソッドを使用してテーブル内からデータまたはhrefの値を抽出する方法を持っていますか?
これがわかりました。パーサにHTTPテーブル内の情報が入力されたときにログに記録するために、パーサ内にカウンタを作成する必要がありました。また、if文で例外(例えば、ディレクトリやその他の不要なHrefs)を処理しました。 – GDeezy