PythonでWebスクレイピングを学ぶ

はじめに

この記事では、Pythonを用いてWEBスクレイピングを学ぶことを目的として、環境構築から実際にWEBスクレイピングをするまでの手順をまとめました。
Anacondaというツールを使う方法もありましたが、
今回は勉強を兼ねているので一から順にやっていこうと思います。

用意した環境

  • OS: Windows10
  • Python: 3.9.6

環境構築

インストール

まずPython公式のWindows用のダウンロードページを開いて、インストール用のファイルのダウンロードをします。
赤枠の部分を押下していくとインストールファイルがダウンロードできました。

ダウンロードしたファイルを実行して、インストールをします。
特にインストール先の指定が無ければ「Install Now」を押すだけでインストールできました。
※今回は手動で環境変数PATHを設定しますが、
自動で環境変数PATHを設定したい場合は、「Add Python *** to PATH」にチェックを入れれば良いようです。

 

環境変数PATHを設定

コマンドプロンプトでPythonのコマンドを実行するには、
環境変数のPATH設定を行う必要があります。

システム環境変数のPathを編集します。
先程インストールしたPythonのフォルダをPathに追加します。

コマンドプロンプトで「python -V」コマンドを実行し、Python のバージョンが表示されればOKです。

 

WEBスクレイピングに挑戦

必要なパッケージをインストール

今回はBeautifulSoupというライブラリを使ってWEBスクレイピングをします。
ただし、BeautifulSoupだけではHTTP通信機能がないため、requestsライブラリを合わせてインストールしていきます。

コマンドプロンプトで下記を実行し、ライブラリのインストールを行います。

「python -m pip install requests」
「python -m pip install bs4」

コマンドプロンプトで「python -m pip list」を実行し、リストの中に下記が表示されていればインストール完了です。

「beautifulsoup4」
「requests」

WEBスクレイピングするコードを書く

必要なライブラリがインストールできたので、
実際にWEBスクレイピングするコードを書いていきます。

試しに対象のURLのタイトルを取得するコードが書かれたPythonファイルを作成します。
今回はYahoo! JAPANのトップページを指定してみました。

C:\Users\murai\Documents\PythonProject\getTitle.py

import requests 
from bs4 import BeautifulSoup 

url = "https://www.yahoo.co.jp/" 

response = requests.get(url) 
soup = BeautifulSoup(response.text, 'html.parser') 
title = soup.find('title').get_text() 
print(title)

WEBスクレイピングしてみる

先程作成したgetTitle.pyを実行してみます。

Yahoo! JAPANのタイトルが取得できました。
WEBスクレイピング成功です!

番外編:APIを使用してみる

せっかくPythonの環境構築をしたので、
WEBスクレイピングだけでなく、APIも使ってみようと思います。

普段はPHPでLaravelフレームワークを使った開発をしているので、
QiitaのAPIを使ってPHP関連の記事で、タイトルに「Laravel」とついている記事を抽出できるかやってみます。
※QiitaのAPIにはアクセス制限があるようですが、頻繁に取りに行くわけではないので、
今回は認証などは省きます。

APIを使用するコードを書く

API実行するコードなので、先ほどWEBスクレイピングで使用したBeautifulSoupは使いません。
jsonを扱うため、jsonライブラリとHTTP通信ができるrequestsを使用します。

C:\Users\murai\Documents\PythonProject\getTitleAndUrlRelatedLaravelByQiita.py

import requests 
import json 

res = requests.get('https://qiita.com/api/v2/tags/php/items') 
jsondata = json.loads(res.text) 

keyword = "Laravel" 

for item in jsondata:
 if keyword in item['title']:
  print(item['title'])
  print(item['url'])

APIを使用してみる

先程作成したgetTitleAndUrlRelatedLaravelByQiita.pyを実行してみます。

PHP関連の記事で、タイトルに「Laravel」とついている記事を抽出できました!

まとめ

以上、Pythonを使ってWEBスクレイピングとAPIの実行をやってみました。
正直なところ、これくらいの内容であればこんなに簡単に実装可能なのか。。。と驚きました。

ただ、WEBスクレイピングするたびにアクセスが走るため、
うっかり無限ループ処理などを書いてしまったら大変なことになるので、
そういったコードを書く場合は、かなり気を付けるべきだと感じました。

また、APIの実行がかなり簡単にできるので、
他の言語でWEBサイト構築をしていたとしても、
APIの使用処理だけはPythonで作るというのも悪くないかもしれないと感じました。

 


--------------------------
システム開発のご要望・ご相談はこちらから

コメントを残す

メールアドレスが公開されることはありません。