LoginSignup
24
25

More than 5 years have passed since last update.

pythonで特定のサイトURLから画像を一括ダウンロード

Last updated at Posted at 2014-08-10

取得したURLが相対バスか絶対パスかを判定して、相対パスなら絶対パスにするという作業は今回はせずに、
取得したいサイトではimgのパスは絶対パスだけを利用していることを条件に作成したプログラムなので相対パスを使っているサイトから画像を取得しようとするとERRORになるので気をつけてください。
コードの詳しい説明(?)は下記にリンクを貼ってあるブログの方に書き留める予定です。(ブログ公開終了しました)
(2014.08.11現在の予定)

downloadImg.py
# -*- coding: utf-8 -*- 

import urllib
import urllib2
import os.path
import sys
from HTMLParser import HTMLParser

def download(url):
    img = urllib.urlopen(url)
    localfile = open(os.path.basename(url),'wb')
    localfile.write(img.read())
    img.close()
    localfile.close()

class imgParser(HTMLParser):

    def __init__(self):
        HTMLParser.__init__(self)

    def handle_starttag(self,tagname,attribute):
        if tagname.lower() == "img":
            for i in attribute:
                if i[0].lower() == "src":
                    img_url=i[1]
                    # 取得した写真のURLを集めたファイルの作成
                    f = open("collection_url.txt","a")
                    f.write("%s\t"%img_url)
                    f.close()

if __name__ == "__main__":

    print('写真を取得したいサイトのURLを入力してください。')
    input_url = raw_input('>>>  ')
    serch_url = input_url
    htmldata = urllib2.urlopen(serch_url)

    print('現在画像ファイルを取得中です...')

    parser = imgParser()
    parser.feed(htmldata.read())

    parser.close()
    htmldata.close()

    # 生成したファイルの読み込み
    f = open("collection_url.txt","r")
    for row in f:
        row_url = row.split('\t')
        len_url = len(row_url)
    f.close()

    number_url = []

    for i in range(0,(len_url-1)):
        number_url.append(row_url[i])

    for j in range(0,(len_url-1)):
        url = number_url[j]
        download(url)

    print('画像のダウンロードが終了しました。')

    # ファイルの削除
    os.remove("collection_url.txt")

Twitter :@fantmsite
ブログ:FantmSite-BLOG

24
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
25