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を使えば、ログインとかも扱えるはずっす)。


Feedbacks

Tags