lxmlを使ってあるURLから画像のURL一覧を取得する
2007年06月23日(土) 00:05
ある人が、lxmlで検索をすると自分が上位だと言っているので邪魔をしてみよう。きっとある人のURLは汚いから勝てるに違いない?
ネタは、あるサイトのイメージURL一覧を取得すること。あんまり、lxml自体は関係ないけど、lxmlは汚いHTMLのパースが非常に優秀なので、いろいろなところに対して試してみてください。
簡単にインストールするには
コマンドラインからeasy_installを使ってください。非常に簡単です。
easy_install lxml
easy_installを入れていない場合には
easy_installが嫌いだったら、このへんからダウンロードしてインストールしてください。
実際の使い方サンプル
いざ、使い方。任意のURLからイメージの一覧を作成する適当なコード
import re
import urllib2
from lxml import etree
from urlparse import urljoin
def _guess_charset(opendurl):
types = re.findall('charset=([\w\d\-]+)', opendurl.headers.get('content-type', 'text/html; charset=utf-8'))
if len(types) > 0:
return types[0]
return 'utf-8'
def _abs_url(base_path, path):
if '://' in path:
return path
return urljoin(base_path, path)
def get_image_url(url):
u = urllib2.urlopen(url)
char_set = _guess_charset(u)
parser = etree.HTMLParser()
root = etree.parse(u, parser).getroot()
img_list = [_abs_url(url, t.attrib['src']) for t in root.findall('.//img')]
return img_list
target = 'http://everes.tumblr.com/'
get_image_url(target)
どうでしょう。実際は汚いHTMLに向けてやってみてください。imgのsrcにダブルクオートがついてたり、なにもついてなかったりするものに対してとか(urllib2を使えば、ログインとかも扱えるはずっす)。