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

Prev Entry

Next Entry