PR

pythonでwebページをスクレイピングしてみる

python初心者がどういう段取りでwebページをスクレイピングできるようになるかまとめた記録です。

立プロ

新卒でメーカーに入り、10年間組み込みの現場で設計を行う。
今は個人事業主として自作の組み込み機器開発や、エージェント様に紹介いただき業務委託を行っています。
C,C#,JavaScript, Vue, PHP, VBA, GAS, Kotlinなど、扱う言語が増えゆく日々。

立プロをフォローする

pythonインストール

python公式からpythonインストーラをダウンロードする。バージョンはとりあえず最新でOKかと。

Welcome to Python.org
...

インストーラ起動して、パソコンにインストールする。

このとき、”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,クラスによって指定した情報を抜き取れる

コメント

タイトルとURLをコピーしました