python初心者がどういう段取りでwebページをスクレイピングできるようになるかまとめた記録です。
pythonインストール
python公式からpythonインストーラをダウンロードする。バージョンはとりあえず最新でOKかと。
インストーラ起動して、パソコンにインストールする。
このとき、”Add Python xx to PATH“のチェックをする必要がある。
インストールできたか確認
コマンドプロンプトを開いて、
python --version
と入力する。問題なくインストールできていればバージョン情報が返ってくる。
もしpythonと返ってきた場合は、インストール失敗しているので、インストーラから一度pythonをアンインストールして再度インストールすること。
pythonプログラムの作成
メモ帳で
print("aaa")
と入力して、保存する。
保存するとき、ファイルの種類をすべてのファイルにして、ファイル名はtest.pyとする(.pyで拡張子指定するのが大事!)。
ファイルはデスクトップに置いておくとする。
コマンドプロンプトを開くと、ユーザー名のフォルダが起点となっているため、下記コマンドでデスクトップ参照にする。
cd ./desktop
cdはカレントディレクトリの略だったかな、./は現在地を示していて、cd ./desktopだと現在地にあるdesktopフォルダに移動、という意味になる。
これでデスクトップに移ったので、さっき作ったpythonファイルを実行する。
python test.py
pythonがpythonを実行しますという意味で、実行ファイル(=test.py)を指定している。
すると、aaaと返ってくるはず。返ってくれば成功、返ってこなければ何かおかしい。本記事の先頭からやり直すことをオススメする。
とりあえずここまでできれば、pythonを実行できる環境作りはできた!
スクレイピングする
ネット上で落ちてるコードをコピペして(=sample.pyの中身を書き換えて)、とりあえず自分のサイトをスクレイピングしてみる。
import requests
TARGET_URL = "https://tatepro.com" # スクレイピングしたいURLをここに書く
html = requests.get(TARGET_URL) # HTMLを取ってくる
print(html)
実行すると、ModuleNotFoundError: No module named ‘requests’とのエラーが出ました。
スクレイピングするにはrequestsライブラリを使わないといけないらしいですが、pythonには標準で含まれてません。なので、まずrequestsライブラリを入れます。
コマンドプロンプトで下記実行
pip install requests
Successfully installed~~~とか出れば問題ないかと。あとバージョン最新にしろ、とかnoticeで言われてますが、これも無視。
再度実行すると、<Response[200]>と出ました、成功ですよね。数字をステータスコードと言って、200=成功というのは知ってますよ。
でも、ほしいのはステータスコードではなく、ページを構成するHTMLです。
BeautifulSoupインストール
そこで必要になるのがBeautifulSoupというHTML抽出ライブラリで、これがすこぶる便利らしい。
まずはBeautifulSoupのインストール。
pip install BeautifulSoup4
さくっと終わります、そしてコードを下記のように変更。
import requests
from bs4 import BeautifulSoup
TARGET_URL = "https://tatepro.com" # スクレイピングしたいURLをここに書く
html = requests.get(TARGET_URL)
soup = BeautifulSoup(html.content, "html.parser")
title = soup.find("title")
print(title)
これを動かすと、<title>立科プログラミング</title>と出てきました…タイトル取り出せた!
ここらでちょっとコードを見ときます。
requests.getで指定したURLのHTMLを読み取って、htmlに格納。
BeautifulSoupでhtmlのテキスト情報をHTML情報形式に変換してんのかな?(これは分からん
で、titleタグを探して中身をtitleに格納する、と。
idやクラスを抽出する
タグでなく、idやクラスの情報を抜くにはどうすればよいか。
findでid=””やclass=””とすればよいらしい。
試しにサイト内にnewsというidを振ってみて、これが抜けるか見てみる。
import requests
from bs4 import BeautifulSoup
TARGET_URL = "https://tatepro.com" # スクレイピングしたいURLをここに書く
html = requests.get(TARGET_URL)
soup = BeautifulSoup(html.content, "html.parser")
id_news = soup.find(id="news")
print(id_news)
divにid振ったからか、div内の全てが返ってきた。ふんふん、だんだんわかってきた。
とりあえず機械学習するための元データ収集がしたいので、抜き方がだいたい分かった現時点でいったん次行きます。
まとめ
requestsライブラリでHTML取得、BeautifulsoupでタグやID,クラスによって指定した情報を抜き取れる
コメント