今回はスクレイピングを行う上で便利であるプログラム言語Pythonを用いて、WEB上にあるデータを取得したいと思います。
スクレイピングとは
簡単に言うと、WEBページにアクセスして、WEB上のHTMLの情報を抜き出して取得することを指します。
注意事項として、このスクレイピング行為が禁止されているWEBサイトがありますのでご注意ください。
事前準備
それぞれコマンドプロンプトから下記コードを入力し、スクレイピングに必要なライブラリをインストールしてください。既に下記ライブラリをインストール済の方は不要です。
・requestsライブラリのインストール
pip install requests
・Beautiful Soupライブラリのインストール
pip install beautifulsoup4
そもそもPythonの開発環境を持っていないという方はこちらを参考に無料構築してみてください。
https://yu-report.com/entry/pythonInstall
スクレイピングを実装しよう
実施すること
簡単な実装例としてよく紹介されているyahooのトップページの主要ニュースの一覧を自動取得する処理を実装したいと思います。(対象:https://news.yahoo.co.jp/)
サンプルコード
実装
実際に抽出時に作成したコードは以下の通りになります。
import requests from bs4 import BeautifulSoup # yahooのサイトから情報取得 response = requests.get('https://news.yahoo.co.jp') # レスポンスを成形 html = BeautifulSoup(response.content, 'html.parser') # 特定のキーワードを抽出 for a in html.select('.topicsList .topicsListItem a'): # 出力処理 print(a['href'], list(a.strings)[0])
結果
プログラム実行後の結果は以下になります。(サイトトップの内容がそのまま出力されてますね)
https://news.yahoo.co.jp/pickup/6369069 東京で212人感染 重症2人増 https://news.yahoo.co.jp/pickup/6369076 東京30℃届かず 24日暑さ戻る https://news.yahoo.co.jp/pickup/6369073 沖縄に活発な雨雲の帯 警戒を https://news.yahoo.co.jp/pickup/6369072 中国 ワクチンの緊急投与開始 https://news.yahoo.co.jp/pickup/6369080 緊急避妊薬「薬局販売」に壁 https://news.yahoo.co.jp/pickup/6369079 ムネリン 病気付き合っていく https://news.yahoo.co.jp/pickup/6369078 コロナ 開場10分前に試合中止 https://news.yahoo.co.jp/pickup/6369067 たんぽぽ白鳥 夫婦でギネス
サンプルコードの詳細解説
①requestsライブラリを使用してWEB上のHTMLを取得
# yahooのサイトから情報取得 response = requests.get('https://news.yahoo.co.jp')
get先のURLを任意のアドレスを指定すれば、対象のページの表示情報が取得できます。
②BeautifulSoupを使用してhtml形式にパース
# レスポンスを成形 html = BeautifulSoup(response.content, 'html.parser')
スクレイピングではhtmlの表示情報を元に特定キーワードを抽出するため、BeautifulSoupを使用してhtml形式に変更してあげます。
③selectを使用してhtmlから抽出する条件を指定
html.select('.topicsList .topicsListItem a')
WEBページのhtmlタグを見るとわかりますが、topicsList のtopicsListItem のa要素で抽出すればOKです。(ここはWEBページやキーワードごとに変更する必要があります。)
④ループして出力
# 特定のキーワードを抽出 for a in html.select('.topicsList .topicsListItem a'): # 出力処理 print(a['href'], list(a.strings)[0])
selectで取得した内容は配列として返却されますので、for文でそのままループ可能です。
以上になります。
コメント
[…] 【初心者向け】Pythonのスクレイピングでyahooニュースのデータを取得する |… […]