pythonで複数サイトをwebスクレイピング
今回はpythonでwebスクレイピングによって複数のサイトから特定の情報を取得した後、その情報をメール送信するという処理を行います。
「webスクレイピング」
webスクレイピング(以下、スクレイピング)とは、webサイトのhtmlからプログラムを使って自動的に情報を抽出、整形することです。定期に特定のサイトを複数閲覧する場合、自動的に情報を取得できるようにすれば非常に効率的です。
今回はpythonでスクレイピングした後、取得したデータをメールで送信する所まで行います。ムスリムの知人の依頼もあって、礼拝時間・国際ニュース・某出版社のブログの情報を取得するプログラム(get_information.py)を実装してみました。
実装したプログラムはGithubで公開しています。
★開発環境
「BeautifulSoupを使ったスクレイピング」
次に本プログラム(get_information.py)実行に必要なモジュールをimportします。
BeautifulSoupに他、スクレイピングに必要な urlibパッケージのrequestモジュールやlxmlモジュールもimportします。
また、今回はメールも送信するので、メール送信に必要なsmtplibモジュールとemail.mine.textモジュールもimportします。
次に礼拝時間を取得できるwebサイトへアクセスします。
今回はIslamicFinder(https://www.islamicfinder.org/)というサイトを参照しました。
このサイトを開いた後、F12を押して開発ツール画面を開きます。すると・・・
赤い丸で囲った箇所「span class="TodayPrayerTime"」に「04:36 AM」や「05:58 AM」と今日の礼拝時間が書いてあります。よって、span要素のclass属性が"TodayPrayerTime"の箇所を探す必要があります。
礼拝時間を取得するプログラムは以下の通りになります。
次に国際ニュースからニュース別ランキングを取得するプログラムを実装します。
今回はイランの国際ニュースの『ParsToday』(http://parstoday.com/ja)の日本語サイトより情報を取得しました。ここにアクセスして、F12で開発ツールを開きますと…
太い赤丸で囲んだ、「アクセスランキング」が取得したい箇所です。一方、開発ツールの箇所をもう少し拡大してみますと、
li要素の「class="item item-separator inline-30"」の中にあるdiv要素にアクセスランキング別のニュースのタイトル(ここでは「米国務長官が、中国側の冷たい歓迎に遭遇」)が記述されていることがわかります。よって、プログラムでもli要素のclass属性で値が"item item-separator inline-30"の中にあるdiv要素を参照します。
ニュースサイトよりアクセスランキングを取得するプログラムは以下の通りになります。
最後に出版社からのブログから情報を取得するプログラムを実装します。
今回は『鹿砦社トップページ』(https://www.rokusaisha.com/index.php)を参照しました。
このサイトを開きますと
赤い四角で囲った箇所が新着ブログの情報で取得したい箇所です。
開発ツールでみると、td要素の「class="ブログタイトル"」に新着ブログのタイトルが記述されています。
したがって、新着ブログのタイトルを取得するプログラムは以下の通りになります。
最後にこれまで説明した各関数(do_pray_time(), do_iran_news(), do_rokusaisha())で取得した情報をまとめてメールで送信します。ダミーのGmailアカウントにログインして、Gmailのサーバーを利用して、メールを送信します。
プログラムは以下の通りになります。
最後に以下のプログラムを実行して、スクレイピングおよびメール送信は完了です。
なお、Google側でセキュリティが起動するのでエラーが返ってくることもあります。 そこで、Google アカウントの「ログインとセキュリティ」で「安全性の低いアプリの許可」を「有効」にしておきましょう。セキュリティの都合上、プログラム実行時のみ有効にして、常時は「無効」にしておきましょう。手順は以下の画像の通りです。
自分のGoogle アカウントのログイン後、
画面右上の「Google アカウント」を選択して、
「ログインとセキュリティ」を選択。そして、
「安全性の低いアプリの許可」を有効にする。
実行すると以下のような内容のメールが、宛先宛先アドレスに送られます(ニュースやブログのタイトルはプログラムの実行日によって変わります)。
ー実行結果ー
//////Today Pray Time//////
Prayer Times in Kyoto
FAJR 04:36 AM
SUNRISE 05:59 AM
DHUHR 11:44 AM
ASR 02:59 PM
MAGHRIB 05:28 PM
ISHA 06:47 PM
QIYAM 12:52 AM
*** Iran international new site ***
News ParsToday
1位 世界が、ヘイリー国連大使の辞任を歓迎
http://parstoday.com/ja/news/w
2位 日本、韓国海軍の観艦式に不参加
http://parstoday.com/ja/news/j
3位 米大統領、サウジアラビアにアメリカの支持の見返りを要求
http://parstoday.com/ja/news/w
4位 トルコの報道各社、カショギ氏の事件関与が疑われるサウジアラビ
http://parstoday.com/ja/news/m
5位 日本がロヒンギャ族に関する正確な調査を求める
http://parstoday.com/ja/news/j
6位 アメリカにへつらうサウジ皇太子の風刺画
http://parstoday.com/ja/news/m
7位 アメリカ国連大使が辞任表明
http://parstoday.com/ja/news/w
8位 ロシア、中国、北朝鮮が、北朝鮮制裁の見直しを要求
http://parstoday.com/ja/news/w
9位 ニューヨークタイムズ、「サウジアラビア反政府ジャーナリストは
http://parstoday.com/ja/news/m
10位 イギリスで、自殺予防担当大臣が任命
http://parstoday.com/ja/news/w
********鹿砦社トップページ********
最新ブログ情報
カルト取材専門家が見る「しばき隊」の問題とは?「やや日刊カル
http://www.rokusaisha.com/blog
まさに“Yummy!!”な1冊! Kis-My-Ft2初の5大ドームツアーを収めた『Kis-M
http://www.rokusaisha.com/blog