今日のPython 初心者ブログ③回目となります。タイトルの言葉なのですが、ほんとにその通りで、「積小為大(せきしょういだい。小さいことが積み重なって大きなことになる)」と思っています。好きな言葉を増やすのもいいですよね。さて今日の本題は
ページ内の画像を一括ダウンロード
スクレイピングの勉強の続きですが、一括ダウンロードをやりました。
プログラミングは一つの事(今回は一括ダウンロード)をやるのに小さな工程を積み重ねて目標に向かいます。
具体的にやるには、目標をたてて、どの工程が必要か設計図を作るといいそうです。
今回は七つの工程が必要(パーツや関数を組み合わせながら完成させる)でした。
① Webページを読み込んで解析する
このへんは自分のメモ用です↓
昨日やったhtmlのタグに注意
検索範囲のタグを設定する
div id = 名前 divを注目する
class名は何度でも使える(学級名みたいなもん)
id属性は1度しか使えない(個人の氏名1人)
プログラム書くときは
クラスは予約語なのでclass_が必要
import requests
from bs4 import BeautifulSoup
load_url = “情報URL”
html = requests.get(load_url)
soup = BeautifulSoup(html.content,”html.parser”)
リンク先の収得
a href=URL
aがタグ
hrefが属性
anchorタグの属性の1つリンク先を指定している
scr 画像の?
② 保存用のフォルダを作る
保存用フォルダを作る
out_folder = Path(“フォルダー名”)
out_folder.mkdir(exist_ok=True)←真やったら
③ Webページのimgタグから 画像のURLを取得する
for element in soup.find_all(“img”):
src = element.get(“src”) #src属性を取得
④ 画像のURLを絶対URLに変換する絶対URLのWeb情報を読み込む
image_url = urllib.parse.urljoin(load_url,src)
imgdata = requests.get(image_url)
収得するには、
絶対URL(全部載せている)と
相対URL(今いるページから見てのURL省略されている) がある。
相対URLを絶対URLに変換しなくてはならない
urllibというモジュールを使う
⑤ URLからファイル名を取り出して(②の保存フォルダ名とつなげる)
filename = image_url.split(“/”)[-1] ←一つ一つのパーツに分けてさいごの要素をとる -1
out_path = out_folder.joinpath(filename)
⑥ 画像データをファイルに書き出す
with open(out_path,mode=”wb”) as f:
f.write(imgdata.content)
⑦ 1秒待つ
サイトに負担かけないように
インポート Time Time.sleepを使う
(1)も必要
まとめ
なかなか理解するまで大変ですけど、
目標設定→パーツ作り→設計図作り→作ってみる(修正(ミス)や改良(関数))→完成
と言う流れ(パターン)を覚えてしまえばいいのかなと。
グーグルの画像検索はこの工程がめちゃくちゃ大きい仕組みに入れて出来てるんかなと思いました。
あとスクレイピングで気をつけなければならないこと、
著作権を守る。
アクセスしすぎて業務を妨害しない。
クローリング禁止のサイトは対象にしない(ロボットrobots meta タグとロボットtxt)に気をつける。
基本を守って楽しくやっていきたいもんですね。
おまけ
SDGs目標に
「ジェンダー平等」
というものがあります。
ジェンダーとは=飢餓のない世界を実現し、すべての女性、男性、女児および男児が、十分な食料を確保する権利を含め人権を確保するための前提条件。
オリンピックの話で森さんの発言がというニュースが取り上げられていますが、日本も含めなんですが、自分は「袋叩きにしていなくなれば終わりっておかしくないかな。 相手がギブアップしなければ死ぬまでやるカンジよくないと思う(いじめ)。間違いはあるでしょ。 揚げ足とりや叩くことに全力尽くすぐらいなら、許して前に向かっていけよ。 それこそ人間らしさってもんだろ。」と思うのです。平等とかいう前にモラルがないなと思う今日この頃。
今日のところは、このへんで以上です。
また明日。
コメント