Pythonを一から勉強してデータ分析できるようになる

~ Pythonとデータ分析のお勉強の記録 ~

スクレイピング:画像ファイルを読み込んで保存する

ファイル保存の基本的な考え方は次の通りだと思う。

1.保存先ファイルをフルパスで定義する

2.そのファイルに保存するデータを指定する

3.ファイル作成(保存)

 

[Take1] まずは、普通に画像を読み込んで保存する。

 

【書式】

imgdata=requests.get(画像URL)
with open(ファイル名,mode="wb") as f:
f.write(imgdata.content)

 

【コード】

import requests
 
# 画像ファイルを取得する
imgdata=requests.get(image_url)
 
# URLから最後のファイル名を取り出す
filename=image_url.split("/")[-1]
 
# 画像データをファイルに書き出す
with open(filename,mode="wb") as f:
  f.write(imgdata.content)

 

【結果】

 

 

[Tak2] 保存先のフォルダを作成して、保存する。上のプログラムの保存先を、Google Driveにしてみる。

 

【書式】

 

【コード】

import requests
 
# 画像ファイルを取得する
imgdata=requests.get(image_url)
 
# URLから最後のファイル名を取り出す
filename=image_url.split("/")[-1]
filepath="/content/drive/MyDrive/Python_2024/001/" +filename
 
# 画像データをファイルに書き出す
with open(filepath,mode="wb") as f:
  f.write(imgdata.content)

 

【結果】

 

 

[Tak3] ダウンロード用のフォルダを作って保存する方法

 

【書式】

フォルダ作成
フォルダ=Path("フォルダ名")
フォルダ.mkdir(exist_ok=True)

 

【コード】

import requests
from pathlib  import Path
 
# 保存用フォルダを作る
out_folder=Path("download")
out_folder.mkdir(exist_ok=True)
 
# 画像ファイルを取得する
imgdata=requests.get(image_url)
 
# URLから最後のファイル名を取り出す
filename=image_url.split("/")[-1]
# 保存ファイルのフルパスを作成する
out_path=out_folder.joinpath(filename)
 
# 画像データをファイルに書き出す
with open(out_path, mode="wb") as f:
  f.write(imgdata.content)

 

【結果】

 

 

[Take4] 全てのimgタグの画像ファイルURLを表示する

 

【書式】

 

【コード】

import requests
from bs4 import BeautifulSoup
import urllib
 
# webページを取得して解析する
response=requests.get(load_url)
soup=BeautifulSoup(response.content,"html.parser").find(class_="entry-content hatenablog-entry")
 
# 全てのimgタグを検索し、リンクを取得する
for element in soup.find_all("img"):
  src=element.get("src")
 
  # 絶対URLと、ファイルを表示する
  print("タグ:",element)
  print("タグのテキスト:",element.text)
  image_url=urllib.parse.urljoin(load_url,src)
  filename=image_url.split("/")[-1]
  print("URL:",image_url)
  print("ファイル名:",filename)
  print("\n")

 

【結果】

タグのテキスト:
ファイル名: 20200614142330.jpg
 
 
タグのテキスト:
ファイル名: 20200614142318.jpg
 
 
タグのテキスト:
ファイル名: 20200614142307.jpg

 

 

[Take5] ページ内の画像を一括ダウンロードする

 

【書式】

1秒待つ
import time
time.sleep(1)

 

【コード】

import requests
from bs4 import BeautifulSoup
from pathlib import Path
import urllib
import time
 
# webページを取得して解析する
response=requests.get(load_url)
soup=BeautifulSoup(response.content,"html.parser").find(class_="entry-content hatenablog-entry")
 
# 保存用フォルダを作成する
out_folder=Path("/content/drive/MyDrive/Python_2024/001/download")
out_folder.mkdir(exist_ok=True)
 
# 全てのimgタグを検索し、リンクを取得する
for element in soup.find_all("img"):
  src=element.get("src")
 
  # 絶対URLを作って、画像データを取得する。
  image_url=urllib.parse.urljoin(load_url,src)
  imgdata=requests.get(image_url)
 
  # URLからファイル名を取り出して、保存フォルダ名とつなげる
  filename=image_url.split("/")[-1]
  out_path=out_folder.joinpath(filename)
 
  # 画像データを、ファイルに書き出す。
  with open(out_path,mode="wb") as f:
    f.write(imgdata.content)
 
  # 1回アクセスしたので1秒待つ
  time.sleep(1)