Pythonとxml.dom.minidomを使用<table>
して、テーブルIDで指定された特定の範囲内のリンクのリストを取得しようとしています。いくつかの優れたアドバイスに基づいて、パターンマッチングの代わりにDOMを使用しようとしています。
import urllib
import xml.dom.minidom
url = 'http://www.batstrading.com/market_data/shortsales'
page = xml.dom.minidom.parse(urllib.urlopen(url))
タグ名page.getElementsByTagName('a')
ですべてのリンクを取得できますが、IDが「monthly-short-sale」のテーブルにのみ含まれているリンクから返されるリンクを制限することはできません。使用するとgetElementById
Noneが返されます。
これは、「月次短期販売」IDがDTD内で定義されていないためですか?もしそうなら、この情報を抽出するための最良の方法は何でしょうか?
これが私が現在使用しているコードです。これは機能しますが、神に対して罪を犯します。
import urllib
import xml.dom.minidom
import datetime
url = 'http://www.batstrading.com/market_data/shortsales'
def getDownloadLink(alink, prefix = 'BATSsh'):
"""return (datetime.date, link) for the provided link if the link
target starts with the data file prefix"""
n = len(prefix)
href = alink.getAttribute('href')
if href.startswith(prefix) and (len(href) == 25):
year = int(href[n:n+4])
month = int(href[n+4:n+6])
day = int(href[n+6:n+8])
date = datetime.date(year, month, day)
return (date, url + '/' + href)
page = xml.dom.minidom.parse(urllib.urlopen(url))
link = (getDownloadLink(a) for a in page.getElementsByTagName('a'))
link = dict(i for i in link if i is not None)