特定のサイトにあるAタグを抽出して、リンクURLとアンカーテキストの組を作る。
- さくらVPS
- CentOS 6.2
- Python 2.6.6
- ソースコード
- 実行結果
#!/usr/bin/env python # -*- encoding: utf-8 -*- import re from urllib import urlopen from HTMLParser import HTMLParser class out_link_parser(HTMLParser): def __init__(self): HTMLParser.__init__(self) self.links = {} self.linkurl = '' # aタグのみ処理を行い、href属性の内容をlinkurlに格納 def handle_starttag(self, tag, attrs): if tag == 'a': attrs = dict(attrs) if 'href' in attrs: self.linkurl = attrs['href'] # これは書かなくてもよい def handle_endtag(self, tag): pass # linkurlに値が入っている場合のみ、(つまりAタグの場合) # urlをキー:アンカーテキストをバリューとしてディクショナリに追加 def handle_data(self, data): if self.linkurl: self.links[self.linkurl] = data self.linkurl = '' def main(): target = 'http://www.python.jp/' url = urlopen(target) html = url.read() parser = out_link_parser() # 日本語があるのでUnicodeに変換 parser.feed(html.decode('utf-8')) parser.close() for k, v in parser.links.items(): k_str = k.encode('utf-8') # アンカーテキストの先頭/末尾のスペースや改行などを除去 v_str = re.sub('^[ \n\r\t]+|[ \n\r\t]+$', '', v).encode('utf_8') # 相対パスやアンカーの場合、ルートのURLを先頭に付与 if re.match('^/', k_str): print "%s: %s" % (re.sub('^/', target, k_str), v_str) elif re.match('^#', k_str): print "%s: %s" % (re.sub('^#', target + '#', k_str), v_str) else: print "%s: %s" % (k_str, v_str) if __name__ == '__main__': main()
http://www.python.jp/pyjug/: PyJUGについて http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tar.bz2: ソースコード http://confoo.ca/: CanFoo http://www.python.jp/psf/donations/: http://www.python.org/download/releases/3.3.0/: Python 3.3.0 http://www.python.jp/#content-body: http://www.python.org: 公式ウェブサイト http://www.python.org/psf/donations/: Pythonに募金を! http://www.python.jp/Zope/: 以前のwww.python.jpサイト http://pypi.python.org/pypi: Pythonパッケージインデックス http://www.python.jp/about/: Pythonとは http://www.python.org/download/releases/2.7.3/: Python 2.7.3 http://code.google.com/p/python-doc-ja/: ドキュメント翻訳プロジェクト http://www.python.jp/: http://docs.python.jp/3.3/: ドキュメント (nightly) http://python.org/download/releases/3.3.0/: リリース http://www.python.jp/news/: ニュース http://www.python.org/ftp/python/3.3.0/Python-3.3.0.tar.bz2: ソースコード http://www.python.jp/pyjug: Legal Statements http://docs.python.jp/2.7/: 日本語ドキュメント http://www.python.jp/download/: ダウンロード http://www.google.com/calendar/ical/kj670le78ju5alcbt1khect5ks%40group.calendar.google.com/public/basic.ics: Python Calendar Japan http://www.python.jp/doc/: ドキュメント http://www.timparkin.co.uk/: design by Tim Parkin http://www.python.jp/mailman/listinfo/python-ml-jp: Python日本語メーリングリスト http://www.python.jp/channews.rdf: RSS https://github.com/tokyo-scipy/archive/tree/master/005: Tokyo.SciPy #5 http://python.org/community/awards/psf-distinguished-awards/: 特別功労賞 http://www.numfocus.org/johnhunter: John Hunter http://www.python.org/psf/license/: オープンソースライセンス http://wiki.python.org/moin/Languages: 各国語のPython情報 http://www.python.org/ftp/python/3.3.0/python-3.3.0.msi: Windows インストーラ http://www.python.jp/#left-hand-navigation: http://www.python.org/ftp/python/2.7.3/python-2.7.3.msi: Windows インストーラ http://www.python.jp/about: Pythonについてもっと詳しく https://github.com/tokyo-scipy/archive: Tokyo.SciPyそこそこまともにとれました。
0 件のコメント:
コメントを投稿