Let’s start Python #2 に参加させていただきました #eLV勉強会

スポンサーリンク

2019/07/22(月)に株式会社CRE-COで開催された、Let’s start Python #2 に参加させていただきました。そこで得られた知見を共有したいと思います。
https://elv.connpass.com/event/139238/

参加した理由

第5回まで予定されている勉強会の第二回となります。可能な限り参加してみたいと考えております。

#1_6月 実行方法 リスト・タプル・辞書 if文・for文
#2_7月 スクレイピング
#3_8月 関数・クラス
#4_9月 フレームワーク(Django)Part1
#5_10月 フレームワーク(Django)Part2


内容

こちらの資料を元に進めていきます。
https://slides.com/ayakomatsumoto/python_elv_2/#/2/4

スクレイピングについて/注意事項

Webページは、HTMLいうファイルで出来ています(他にもCSS、JavaScriptファイルなども使われます)。インターネットの仕組みは、世界中のどこかのサーバーに保存されてるHTMLファイルを、ブラウザを通じて情報を見ている形となります。

スクレイピング(Scraping)は、WebページからHTMLを解析して、必要な情報を抜き出すこと。
ページの中で必要な部分だけ抽出する形ですね。

クローリング(Crawling)は、webサイトのリンクを辿って、各webページを収集することです。
複数のページを移動しながら収集します。

注意点

著作権を侵害しないよう注意が必要です。(法的に問題となります)
Webページは基本的に著作物です
私的使用の範囲内の複製など、目的次第によって認められてもいるが、注意が必要
Webサイトによっては、クローリングが禁止されている
robots.txtやrobots metaタグで拒否されているページをクロールしないこと。
Webサーバへの負担をかけないよう、配慮して作成すること。最低1秒以上は間隔をあけるようにしましょう。(また、1日の間に膨大な回数をアクセスする事も問題となります)

(今回のハンズオンでスクレイピングするwebページは、すべて講師の方が用意していただいたものですので、法的に問題なく実習を進めることができました)

robots.txtを確認

robots.txtとは、Googleなど検索エンジンの「クローラー(自動巡回ロボット)」に向けて、サイトでのアクセスの許可/不許可などの命令をまとめたファイルです。
詳細は「Robots.txt の仕様」をご覧ください。
https://developers.google.com/search/reference/robots_txt?hl=ja

Googleのrobots.txtを確認してみましょう。
https://www.google.co.jp/robots.txt

ディレクティブ 説明
User-Agent 以降のディレクティブの対象となるクローラーを表す
Disallow クロールを禁止するパスを表す
Allow クロールを許可するパスを表す
Crawl-delay クロール間隔を表す

全ページのクロールを許可しない
User-Agent: * //
Disallow: /

全ページのクロールを許可する
User-Agent: *
Allow: /

特定のクローラーを許可しない
(User-Agnetヘッダーにhogehoge-bot という文字列を含むクローラーは全てのクロールを禁止
他のクローラーは/old/ と/tmp/以下のみ禁止)
User-Agent: *
Disallow: /old/
Disallow: /tmp/
User-Agnet:hogehoge-bot
Disallow: /

robots.txtをしっかり確認した上で、ルールに沿った上で進めることが大切です。


仮想環境

Python3 の標準ライブラリである venv を使います。

・仮想環境を作成
(myvenvは、仮想環境の名前です。任意の名前を付けることができます)
mac
$ python3 -m venv myvenv
win
$ python -m venv myvenv

・仮想環境を起動
mac
$ source myvenv/bin/activate
win
$ myvenv¥Scripts¥Activate

ターミナル上で
(myvenv) ユーザー名〜
となれば起動完了です。

・ライブラリのインストール
mac/
$ pip install requests


初めてのスクレイピング

仮想環境のディレクトリに
sc_1.pyを作成します。

あるwebページの、htmlコードを取得するプログラムです。

URLを変数に入れ、requestsのgetメソッドでurlを取得し、変数responseへ代入。
url = “http://sandream.main.jp/elv_python/first”
response = requests.get(url)

そして文字化け防止のためにエンコーディングをかけます。
response.encoding = response.apparent_encoding

ファイルはこちらをご覧ください。
https://slides.com/ayakomatsumoto/python_elv_2/#/3/1
https://github.com/blackdesigntokyo/handson/tree/master/myvenv

仮想環境のディレクトリに移動し、ターミナルで以下のコマンドを入力します
mac
$ python3 sc_1.py
win
$ python sc_1.py

無事に動けば、こちらのhtmlファイルが取得できます。
http://sandream.main.jp/elv_python/first


csv情報を抜き出す

同様に、csv情報を抜き出す事も可能です。

仮想環境のディレクトリに
sc_2.pyを作成します。

ファイルはこちらをご覧ください。
https://slides.com/ayakomatsumoto/python_elv_2/#/3/3
https://github.com/blackdesigntokyo/handson/tree/master/myvenv


連続して抜き出す

サーバの負荷等の影響を考慮し、複数のページを抜き出す際は、1秒以上の間隔をあけましょう。
import time
time.sleep(1) 

ファイルはこちらをご覧ください(sc_3.py)
https://slides.com/ayakomatsumoto/python_elv_2/#/3/9
https://github.com/blackdesigntokyo/handson/tree/master/myvenv


Parse HTML / HTMLを解析する

BeautifulSoup4ライブラリをインストールします
$ pip install BeautifulSoup4

呼び出すには
from bs4 import BeautifulSoup

BeautifulSoupのインスタンス
bs = BeautifulSoup(response.text, ‘html.parser’)

BeautifulSoup4は、htmlの構文解釈のライブラリです。出来ることは「ulタグで囲まれた部分を抽出」「aタグのテキストを取得」「aタグのhref属性を取得」などです。

このwebページから、リンク(aタグ)のテキストとリンク先を取得して表示してみます。
http://sandream.main.jp/elv_python/second

ulタグで囲まれた部分を抽出します

ul_tag = bs.find(‘ul’)

ファイルはこちらをご覧ください(sc_4.py)
https://slides.com/ayakomatsumoto/python_elv_2/#/4/3
https://github.com/blackdesigntokyo/handson/tree/master/myvenv


クローリング

http://sandream.main.jp/elv_python/exercises
の中のリンク先に記載されている、pタグ内のテキストだけを表示します。

進め方としては、まずulタグで囲まれた部分を抽出します。
(ここからはfor文でまわします)
aタグのhref属性を取得し、そこからhtmlを取得。
そこからpタグを取得し、それをプリントします。

ファイルはこちらをご覧ください(sc_5.py)
https://slides.com/ayakomatsumoto/python_elv_2/#/5/4
https://github.com/blackdesigntokyo/handson/tree/master/myvenv


まとめ

かなり高度な内容に感じましたが、しっかりとテキストをご用意いただいたおかげで、スムーズに進めることができました。様々な局面で応用できそうですので、これからもしっかりと技術を磨いていきたいと思います。


イベント概要

https://elv.connpass.com/event/139238/
■ 日時:2019年7月22日(月) 19:00-21:30
(18:00開場としますので時間を持て余す方はコワーキング利用下さい!
 18:15位からPythonインストール方法が分からない方サポートいたします。)
■ 会場:CO-CreationLABO
〒102-0093 東京都千代田区平河町1-4-3平河町伏見ビル2F
■参加費:無料 ※受付時にお名刺を1枚ご用意願います。※各種ドリンク(有料)あり。


ITエンジニアコミュニティeLVとは?

eLVはスキルアップに資する誰でも参加可能なコミュニティです。
「組織の枠を超え、ITエンジニアの価値(スキル)向上に寄与する」ということを目的としたコミュニティです。
また、プチ勉強会の企画を募集中です。

※他のイベントはこちらからチェック下さい。
https://elv.connpass.com/

※メンターのいる勉強部屋情報はこちらからご覧いただけます。
http://hfs.connpass.com/

※Co-Creation BAR(ICT関係者の集うBAR)のイベントはこちらからチェック下さい。
https://elv-ccb.connpass.com/


講師紹介

松本 綾子(マツモト アヤコ)
株式会社CRE-CO
独学で、Excelを学び、PythonやVBAを利用した社内用のツール作成等を行う。
その他:
eLV TechnicalCoach & ManagementPartner
Django Girls Japan テクニカルディレクター https://djangogirls.org/
プログラミングをもっと広めたいという想いで活動中。

トギャッターまとめ、もしくはハッシュタグ検索

#elv勉強会

スポンサーリンク

シェアする