brown water

ゲームやアニメの感想とかプログラムとか

Pythonで画像スクレイピング&ダウンロード

前回の記事で使ったBeautifulSoupを応用して、今回は画像をスクレイピングしたいと思います。
スクレイピングするサイトですが、これも前に書いた記事Bashで画像ダウンロードで使用したサイトにします。

画像URLの取得

クラス名mdMTMWidget01ItemCite01Valueを探してリンク情報を取得します。

import requests
from bs4 import BeautifulSoup

url='https://matome.naver.jp/odai/2149130246521074801'
req = requests.get(url)
soup = BeautifulSoup(req.text, 'html.parser')
feeds = soup.find_all(class_='mdMTMWidget01ItemCite01Value')
for feed in feeds:
    print(feed.a.get('href'))

これでjpg画像のURLを取得出来ることが分かりました。

画像のダウンロード

sleepを使いたいのでインポートしておきます。

from time import sleep

先程のコードを多少変更して追加

count = 0
for feed in feeds:
    img_url = feed.a.get('href')
    img_file = requests.get(img_url)
    save_name = f'./test_{count:03}.jpg'    #保存場所とファイル名
    with open(save_name, 'wb') as f:
        f.write(img_file.content)
    sleep(1)
    count+=1

ダウンロードにはRequestsを使用します。
保存ファイル名を指定してファイルを書き込み、スリープを挟みながら処理していきます。

複数ページ処理については難しくないと思うので割愛。

まとめ

全コード

import requests
from bs4 import BeautifulSoup
from time import sleep

url='https://matome.naver.jp/odai/2149130246521074801'
req = requests.get(url)
soup = BeautifulSoup(req.text, 'html.parser')
feeds = soup.find_all(class_='mdMTMWidget01ItemCite01Value')

count = 0
for feed in feeds:
    img_url = feed.a.get('href')
    img_file = requests.get(img_url)
    save_name = f'./test_{count:03}.jpg'    #保存場所とファイル名
    with open(save_name, 'wb') as f:
        f.write(img_file.content)
    sleep(1)
    count+=1

ここのサイトのソースが簡単な構造になっているというのもあり、比較的楽に画像スクレイピングが出来ました。
最初はファイルのダウンロードが上手くいかなったのですが、調べたらRequestsを使えば出来ることが分かった。
色々使えるライブラリですね。