「いらすとや」さんのWebサイトのスクレイピングで一括ダウンロード

computer_search_kensaku-thumbnail2 「いらすとや」さんのWebサイトのスクレイピングで一括ダウンロード

みなさんおなじみの「いらすとや」さんですが、Pythonによる機械学習の勉強にイラストを使わせてもらいたいなーと思いました。まずは教師データが必要になるので、とりあえず画像データをスクレイピングするPythonのコードを作成しました。

コマンドと結果

コマンドの仕様としては、引数に「検索ワード」と「最大取得数」を渡すようにしました。

 > python.exe irasutoya_down.py インターネット 200

すると下記の様にひたすら画像がダウンロードされていきます。

http://4.bp.blogspot.com/-zTvzECyWEsk/VwIjHWMdszI/AAAAAAAA5e4/W_kAnVythXoHGzGO3AkgrHImS3cpvMiuQ/s800/internet_kanki_man1.png
http://4.bp.blogspot.com/-RK1r8J9kF_c/VwIjHdTzFVI/AAAAAAAA5e8/_N9Xhc0JtM0DLsHLU5eqhqxkk8lQ-aZSQ/s800/internet_kanki_man2.png
http://2.bp.blogspot.com/-llDpo-3-K7k/VwIjHt4UonI/AAAAAAAA5fA/PWpKhDKWK7IvwmC4yuyBZ8b4L4sXoZVMw/s800/internet_kanki_woman1.png
http://4.bp.blogspot.com/-IxWKND4JML8/VwIjILi7wFI/AAAAAAAA5fE/lgjzp6DwT6cVJKTZI5dOQe-AHX4hGDaYw/s800/internet_kanki_woman2.png
<中略>
http://2.bp.blogspot.com/-beSfKCyewTk/Udy6lPRVwhI/AAAAAAAAWI8/uNDgJL6OC3I/s800/computer_family.png
http://2.bp.blogspot.com/-KwGSRNHzsVA/UbVvOo58z5I/AAAAAAAAUsc/y2sh_GfnPQ8/s800/computer_wireless.png

 

フォルダにも下記のように保存されていきます。

computer_search_kensaku-thumbnail2 「いらすとや」さんのWebサイトのスクレイピングで一括ダウンロード

続いて、コードになります。

メインコード

手順としては下記の通りです。

  1. 検索ワードで引っかかるイラストの個別ページのリンクを一通り取得
  2. その個別ページの中をスクレイピングして画像のリンクを取得
  3. 画像をローカルにダウンロード

import sys,os
import re
import urllib.request as urlreq
from bs4 import BeautifulSoup
import requests

# 一時的に保存するページのリスト
linkData = []

if len(sys.argv) != 3:
    print("Usage: python.exe irasutoya_down.py <SearchWord> <max num>")
    quit()

keyword = sys.argv[1]
max = int(sys.argv[2])

# 検索結果から各ページのリンク先をmaxページ分だけ取得
for num in range(0,max,20):
    res = requests.get("http://www.irasutoya.com/search?q="+keyword+"&max-results=20&start="+str(num))
    soup = BeautifulSoup(res.text, "lxml")

    # Linkの箇所をselect
    links = soup.select("a[href]")
    for a in links:
        # Linkタグのhref属性の箇所を抜き出す
        href = a.attrs['href']
        # 画像データに対応するページのリンク先のみをリストに格納
        if re.search(r"irasutoya.*blog-post.*html$",href):
            if not href in linkData:
                linkData.append(href)

# 各ページから画像データのリンクを取得して、画像を保存
for link in linkData:
    res = requests.get(link)
    soup = BeautifulSoup(res.text, "lxml")

    # 記事中の画像データを抜き出す
    # class separator -> a の抜き出し
    links = soup.select(".separator > a")
    for a in links:
        # hrefのデータを取得
        imageLink = a.get('href')
        # ファイル名の取得
        filename = re.search(r".*\/(.*png|.*jpg)$",imageLink)
        # 画像をダウンロードする
        urlreq.urlretrieve(imageLink,"down/"+filename.group(1))
        # デバッグ用にダウンロード先Linkを表示
        print(imageLink)

ただ、いまだにBeautifulSoupの使い方が分かっていなくて、ググったり本を片手にコードを書いています。

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)