特定のサイトにある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 件のコメント:
コメントを投稿