파이썬으로 이미지를 수집하는 방법

소개



Deep Learning용으로 이미지 수집하려고 하고, 이 기사 에 다가갔습니다만,
웹 페이지의 내용이 바뀌었는지 잘못되었으므로 다시 작성해 보았습니다.

코드



image_download.py
import requests
import urllib.request
import time
import json

def scraping(url, max_page_num):
    # ページネーション実装
    page_list = get_page_list(url, max_page_num)
    # 画像URLリスト取得
    all_img_src_list = []
    for page in page_list:
        try:
            img_src_list = get_img_src_list(page)
            all_img_src_list.extend(img_src_list)
        except:pass
    return all_img_src_list


def get_img_src_list(url):
    # 検索結果ページにアクセス
    response = requests.get(url)
    webtext = response.text

    # 元の記事ではBeatifulsoupを使っていたのですが、画像が取れなかったので、変更しています。
    start_word='<script>__NEXT_DATA__ = '
    start_num = webtext.find(start_word)
    webtext_start = webtext[start_num + len(start_word):]
    end_word = ';__NEXT_LOADED_PAGES__='

    end_num = webtext_start.find(end_word)
    webtext_all = webtext_start[:end_num]
    web_dic = json.loads(webtext_all)
    img_src_list = [img['original']['url'] for img in web_dic["props"]["initialProps"]["pageProps"]["algos"]]

    return img_src_list


def get_page_list(url, max_page_num):
    img_num_per_page = 20 #ここを変えるとダウンロード数が変わります。
    page_list = [f'{url}{i*img_num_per_page+1}' for i in range(max_page_num)]
    return page_list

def download_img(src, dist_path):
    time.sleep(1)
    try:
        with urllib.request.urlopen(src) as data:
            img = data.read()
            with open(dist_path, 'wb') as f:
                f.write(img)
    except:
        pass


def main():
    search_words = ["橋本環奈"] #検索したいワードをリストで渡します。
    for num, search_word in enumerate(search_words):
        url = f"https://search.yahoo.co.jp/image/search?p={search_word}&ei=UTF-8&b="
        max_page_num = 20
        all_img_src_list = scraping(url, max_page_num)

        # 画像ダウンロード
        for i, src in enumerate(all_img_src_list):
            download_img(src, f'./img/image_{num}_{i}.jpg') #保存先は適当に変えてください


if __name__ == '__main__':
    main()


img 폴더를 만들고 위를 python으로 실행하면 img 폴더에 이미지가 저장됩니다.
이런 이미지입니다.


스크래핑은 상대의 서버에 부하가 걸리므로 조심합시다!

수정



코멘트에 지적이 있었기 때문에, 코드를 1개소 변경했습니다.
수정 전: 화질이 나빠진다

img_src_list = [img['imageSrc'] for img in web_dic["props"]["initialProps"]

수정 후 : 좋은 화질의 이미지를 얻으려면 여기

img_src_list = [img['original']['url'] for img in web_dic["props"]["initialProps"]["pageProps"]["algos"]]

참고



파이썬으로 하시모토 칸나의 이미지를 자동 수집해 보았다! !

좋은 웹페이지 즐겨찾기