Python と lxml を使用して、Bloomberg の Web サイトから ETF とミューチュアル ファンドに関するデータを収集しています。データをスクレイピングしようとしているページの例はhttp://www.bloomberg.com/markets/funds/country/usa/です。
ファンドごとに、シンボル、名前、ファンドの種類、および目的が必要です。シンボル、名前、またはファンドの種類をスクレイピングするのに問題はありません。しかし、私は目的に苦労しています。私が引用した Web ページ (および後続のページ) を見ると、目的が空白であることがわかります。ページの最後のファンドの HTML は次のようになります。
<tr class='tkr_alt'>
<td class="name">
<a href="/quote/ADTKEX:US"><span>Advisor Disciplined Trust 193 - Taxable Municipal Bond Portfolio - Series 1</span> (ADTKEX)</a></td>
<td class="symbol">ADTKEX:US</td>
<td>UIT</td>
<td></td>
</tr>
1 列目にはファンド名、2 列目にはティッカー シンボル、3 列目にはファンドの種類 (ETF、UIT、オープン エンド型ファンド、クローズド エンド型ファンドなど)、4 列目には目的 (成長、価値、収入など)。この特定のファンドには、目的がありません。
ファンドの目的 (最後の列) を抽出するために使用しているコードは次のとおりです。
result = urllib.urlopen(filename)
element_html = result.read()
doc = lxml.html.document_fromstring (element_html)
list_obj = doc.xpath (u'.//tr[td[contains (@*, "name")]]/following-sibling::td/text()')
このコードは、ファンドの目的を配列にコピーします。残念ながら、このコードはエントリが欠落しているという事実を完全に無視しています。したがって、名前、シンボル、およびファンド タイプのリストにはそれぞれ X 要素がありますが、目的のリストには X-1 要素しかありません。
スクリプトに空白のエントリを認識させ、nil または '' の配列要素を提供させるにはどうすればよいですか?
列エントリ全体をキャプチャする方法はありますか (「blahblahblah」のようになります)。これらの不要なタグは簡単に削除できるので、喜んで処理します。