前回の続き
最近悩みが尽きない人←
スクレイピング
Pythonで自動化するという話をするとよくやる「スクレイピング」をやってみる。
スクレイピングは削り取る的な意味で、今回はHTMLの構造などを抽出するWebスクレイピングができるかを試す。
メンバー1「実際よそのWebサイトの情報抜き取るって泥棒だよね」
総務省とかがスクレイピングしているなど色々ありますが、個人できちんと調べて、違法にならないかを確認すること。
Webサイト作る側はスクレイピングされたくなかったらきちんと対策しておきましょう。
今回はHTMLを扱うためにBeautiful Soupを使用。(教科書通り
お題:弊社HPのヘッダー画像でもダウンロードしてみる。
import requests
from bs4 import BeautifulSoup
url = "弊社URL"
html = requests.get(url).text
soup = BeautifulSoup(html)
list = soup.select("画像があるクラス名")
for a in list:
text = a.img.get("alt")
if "画像のalt属性に含まれるワード" in text:
imgUrl = url + a.img.get("src")
response = requests.get(imgUrl)
with open('取得画像.svg', 'wb') as fp:
fp.write(response.content)
簡単にできた。と思いきやいくつか躓いた点があったので下記に記載。
HTMLタグ要素ってどうやって確認するの?
Chrome使っている場合はF12キーで開発者ツールを起動し、Ctrl+Shift+Cで取得したい項目を選択する。
すると、該当のHTMLタグに飛べるのでclassやidが分かる。
imgのalt属性ってどうやって取得するの?
get("hoge") で取得可能。取得できればstr型で、取得できないとNoneになる。
文字列検索ってどうやるの?
"検索したいワード" in 検索対象文 もしくはfind()関数で判断可能。
↑地味に使い方を逆にしてたせいで動かなかった。。。英語ちゃんと読めば分かりますね・・・
まとめ
スクレイピングを使うことで各Webから必要な情報を持ってきて一覧にできたり、定例業務の効率化ができる。
とはいえ、本当に泥棒になる可能性もあるので、みんなやってるかといって気を抜かないように。