Pyクロ - PythonではじめるWebクローリング

22
Py クク Ver 1.0.0 クククククククク 2016 ク 11 ク 30 ク Copyright © Skywill inc. All Rights Reserved. Python ククククク Web クククククク

Transcript of Pyクロ - PythonではじめるWebクローリング

Page 1: Pyクロ - PythonではじめるWebクローリング

Py クロ

Ver 1.0.0

 スタートアップ編

2016 年 11 月 30日

Copyright © Skywill inc. All Rights Reserved.

Python ではじめる Web クローリング

Page 2: Pyクロ - PythonではじめるWebクローリング

2Copyright © Skywill inc. All Rights Reserved.

本スライドについて

対象者

  Python の初級者  ちょっとだけ、 Python をかじったことがある人

  Web クローリング未経験者  ネット上のいろいろな情報を、楽して集めたい人

用途

 「手軽に Web クローリングをはじめる」ためのお助け資料

Page 3: Pyクロ - PythonではじめるWebクローリング

3Copyright © Skywill inc. All Rights Reserved.

本スライドについて

作成者

嶋田 裕Python 経験 5 ヶ月職業: エンジニア興味: ビッグデータ、統計解析、      Web クローリング趣味: 家庭菜園、フットサル

公開スライド

⇐ 是非是非、見てみてください。

Page 4: Pyクロ - PythonではじめるWebクローリング

4Copyright © Skywill inc. All Rights Reserved.

1) Web クローリングを知る

内容

1) Web クローリングを知る

2) Python 開発環境をセットアップ

3) Web クローラーを作ってみる!!

Page 5: Pyクロ - PythonではじめるWebクローリング

5Copyright © Skywill inc. All Rights Reserved.

1) Web クローリングを知る

クローリングWeb サイトのリンクを辿って(クローリング)、情報をこすり取る(スクレイピング)。例:購入を検討している書籍のレビューページまでリンクを辿って、情報を取得する。

スクレイピング

★★★★☆初心者にオススメです。 :★★☆☆☆改訂版が望まれる。 :★★★★★もっと Python を学んでみたくなる。 :

クローリング

クローリング

スクレイピング

Page 6: Pyクロ - PythonではじめるWebクローリング

6Copyright © Skywill inc. All Rights Reserved.

2) python 開発環境をセットアップ

内容

1) Web クローリングを知る

2) Python 開発環境をセットアップ

3) Web クローラーを作ってみる!!

Page 7: Pyクロ - PythonではじめるWebクローリング

7Copyright © Skywill inc. All Rights Reserved.

2) python 開発環境をセットアップ

インストール 実行環境: Windows 10

本スライドでは、 Python で Web クローラーを作成します。

以下の URL からインストーラをダウンロードして、インストールをします。

https://www.python.org/downloads/バージョン:  3.5.2

Page 8: Pyクロ - PythonではじめるWebクローリング

8Copyright © Skywill inc. All Rights Reserved.

2) python 開発環境をセットアップ

セットアップ

  python -m pip install --upgrade pip

Web クローラーを作成するために必要なパッケージを、 PIP コマンドでインストールします。インストールした後であれば、この PIP コマンド自体をアップグレードします。コマンドプロンプト上などで、以下のコマンドを実行します。

  pip install beautifulsoup4

  pip install bottlenose

作成するサンプルプログラム( Web クローラー)で使用するパッケージをインストールします。

Page 9: Pyクロ - PythonではじめるWebクローリング

9Copyright © Skywill inc. All Rights Reserved.

3) Web クローラーを作ってみる!!

内容

1) Web クローリングを知る

2) Python 開発環境をセットアップ

3) Web クローラーを作ってみる!!

Page 10: Pyクロ - PythonではじめるWebクローリング

10Copyright © Skywill inc. All Rights Reserved.

3) Web クローラーを作ってみる!! 【①画像を集める】

① 画像を集める

「 Yahoo !ニュースのトップページ」 にある画像を、ごっそり取ってくる!!

スクレイピング

Page 11: Pyクロ - PythonではじめるWebクローリング

11Copyright © Skywill inc. All Rights Reserved.

3) Web クローラーを作ってみる!! 【①画像を集める】

Python を使って、 Web ページから欲しい情報をこすり取る(スクレイピング)するためのパッケージライブラリ。HTML のタグ構成を階層的に読み込み、簡単に欲しいタグ情報を選択できる。

BeautifulSoup

■ スクレイピング対象の Web ページ( html )

<head> <title> タイトル <title></head>

<body> <img src=“ 画像ファイル .jpg”> <a href=“ リンク先 URL”></body>

まず、対象の Web ページの HTML 情報を読み込む。変数名 = BeautifulSoup (対象の Web ページの HTML 情報)

例えば、タイトル情報(文字列)は、これで取得できる。変数名 .find(“title”).text

例えば、リンク先 URL は、これで取得できる。変数名 .a.find(“href”)

例えば、画像ファイルの URI は、これで取得できる。変数名 .findAll(src=True)

Page 12: Pyクロ - PythonではじめるWebクローリング

12Copyright © Skywill inc. All Rights Reserved.

3) Web クローラーを作ってみる!! 【①画像を集める】

import osfrom urllib.request import urlretrievefrom urllib.request import urlopenfrom bs4 import BeautifulSoup

# 画像取得する Web ページの URLurl= "http://news.yahoo.co.jp"

# 画像出力先フォルダoutputFolder = "imagefiles"

# メイン処理if(__name__ == '__main__'): # HTML リソースを取得する html = urlopen(url)

# HTML リソースから BeautifulSoup オブジェクトを作成する。 soup = BeautifulSoup(html, "html.parser")

# BeautifulSoup オブジェクトから src タグ情報のみ取得して、リストに格納する。 srcTagList = soup.findAll(src=True)

scrape_images.py

Yahoo!! ニュースのトップページの URL

Page 13: Pyクロ - PythonではじめるWebクローリング

13Copyright © Skywill inc. All Rights Reserved.

3) Web クローラーを作ってみる!! 【①画像を集める】

# 全ての src タグに対して、以下を実行する。 for srcTag in srcTagList: # src タグで指定されているソース URL を取得する。 srcUrl = srcTag["src"]

if srcUrl is not None: # ソース URL のオブジェクトの拡張子を取得する。 root, ext = os.path.splitext(srcUrl)

# 画像ファイルに対して、以下を実行する。 if ext in ['.jpg', '.jpeg', '.gif', '.tiff', '.bmp', '.png']: # 出力するソース URL の画像ファイルのパスを取得する。 filePath = outputFolder + '/' + os.path.basename(srcUrl)

# 出力先フォルダが存在しない場合、作成する。 if not os.path.exists(outputFolder): os.makedirs(outputFolder)

# 出力先フォルダに、ソース URL の画像ファイルを出力する。 urlretrieve(srcUrl, filePath)

scrape_images.py  (つづき)

Page 14: Pyクロ - PythonではじめるWebクローリング

14Copyright © Skywill inc. All Rights Reserved.

3) Web クローラーを作ってみる!! 【②書籍レビュー取得】

実行結果

Python スクリプト( scrape_images.py )と同じ場所に、 images フォルダが生成されて、その中に取得した画像ファイルの一覧が格納されます。取得できる画像は、その日のニュース記事により、変わります。

Page 15: Pyクロ - PythonではじめるWebクローリング

15Copyright © Skywill inc. All Rights Reserved.

3) Web クローラーを作ってみる!! 【②書籍レビュー取得】

② 書籍レビュー取得

Amazon API を利用して、 Amazon の書籍紹介ページからレビュー情報を取得する。

★★★★☆初心者にオススメです。 :★★☆☆☆改訂版が望まれる。 :★★★★★もっと Python を学んでみたくなる。 :

クローリング

スクレイピング

Amazon API を利用して、レビュー情報を欲しい書籍の紹介ページを取得する。

書籍の紹介ページにあるリンクを見つけて、レビュー情報ページを取得する。

レビュー情報(タイトル、著者、日付、レート、コメント)を抽出する。

Page 16: Pyクロ - PythonではじめるWebクローリング

16Copyright © Skywill inc. All Rights Reserved.

3) Web クローラーを作ってみる!! 【②書籍レビュー取得】

Amazon が無償で提供する API です。この API を利用して、 Amazon サイトから商品情報を取得することができます。

Amazon API

この API を利用するためには、 Amazon アソシエイト・プログラムというところで、アカウントを作成する必要があります。以下のサイトなどが参考になります。

例えば、Amazon サイトで、キーワード(書籍)を入力して得られる検索結果ページを、以下の API で取得できる。ItemSearch(Keywords= キーワード , SearchIndex="Books")

http://www.ajaxtower.jp/ecs/pre/index4.html

Page 17: Pyクロ - PythonではじめるWebクローリング

17Copyright © Skywill inc. All Rights Reserved.

3) Web クローラーを作ってみる!! 【②書籍レビュー取得】

from bottlenose import apifrom urllib.request import urlopenfrom bs4 import BeautifulSoup

# Amazon   API を利用するためのアカウント情報AMAZON_ACCESS_KEY_ID = “ アクセスキー“AMAZON_SECRET_KEY = “ シークレットキー“AMAZON_ASSOC_TAG = “ アソシエイトタグ“

# 検索キーワード(書籍名など)KEY_WORDS = u" 確かな力が身につく Python 「超」入門 "

# メイン処理if(__name__ == '__main__'):

     # Amazon API を使用して、書籍ページを検索する。(検索キーワード: KEY_WORDSの値)     amazon = api.Amazon(AMAZON_ACCESS_KEY_ID, AMAZON_SECRET_KEY, AMAZON_ASSOC_TAG, Region="JP") # 検索結果の XML 情報を取得する。     response = amazon.ItemSearch(Keywords=KEY_WORDS, SearchIndex="Books")     u_response = response.decode(‘utf-8’,‘strict’)

get_amazon_reviews.py

「アクセスキー」「シークレットキー」「アソシエイトタグ」は、Amazon アソシエイト・プログラムでアカウントを作成すると、取得できる。

Page 18: Pyクロ - PythonではじめるWebクローリング

18Copyright © Skywill inc. All Rights Reserved.

3) Web クローラーを作ってみる!! 【②書籍レビュー取得】

     # XML 情報から BeautifulSoup オブジェクトを作成する。     soup = BeautifulSoup(u_response, "html.parser")

     # BeautifulSoup オブジェクトから、 itemlinks タグ情報のみ取得して、リストに格納する。     itemlinks = soup.findAll("itemlink")

     # 書籍紹介ページに含まれる、レビュー情報ページのリンクを取得する。     for itemlink in itemlinks:         if itemlink.description.text == 'All Customer Reviews':

     review_page_url = itemlink.url.text     break

     # HTML リソースから BeautifulSoup オブジェクトを作成する。     html = urlopen(review_page_url)

     # BeautifulSoup オブジェクトから、 レビュー情報が記載されているセクションの情報のみ取得して、     # リストに格納する。     soup = BeautifulSoup(html, "html.parser")     review_parts = soup.findAll(class_="a-section review")

get_amazon_reviews.py (つづき)

Page 19: Pyクロ - PythonではじめるWebクローリング

19Copyright © Skywill inc. All Rights Reserved.

3) Web クローラーを作ってみる!! 【②書籍レビュー取得】

     for review_part in review_parts:         # レビュー情報(タイトル、著者、日付、レート、コメント)の取得         title = review_part.find(class_="a-size-base a-link-normal review-title a-color-base a-text-bold")         author = review_part.find(class_="a-size-base a-link-normal author")         date = review_part.find(class_="a-size-base a-color-secondary review-date")         rate = review_part.find(class_="a-icon a-icon-star a-star-5 review-rating")         if rate is None:             rate = review_part.find(class_="a-icon a-icon-star a-star-4 review-rating")         if rate is None:             rate = review_part.find(class_="a-icon a-icon-star a-star-3 review-rating")         if rate is None:             rate = review_part.find(class_="a-icon a-icon-star a-star-2 review-rating")         if rate is None:             rate = review_part.find(class_="a-icon a-icon-star a-star-1 review-rating")         comment = review_part.find(class_="a-size-base review-text")

         # レビュー情報(タイトル、著者、日付、レート、コメント)の取得         print(title.text)          print(author.text)         print(date.text)         print(rate.text)         print(comment.text)         print("==============================================")

get_amazon_reviews.py (つづき)

Page 20: Pyクロ - PythonではじめるWebクローリング

20Copyright © Skywill inc. All Rights Reserved.

3) Web クローラーを作ってみる!! 【②書籍レビュー取得】

Chapter.6 以降がもう少し丁寧なら最高M.S.2016 年 10 月 26 日5 つ星のうち 4.0Chapter.5 までは、とてもわかりやすく、プログラミング初心者にもオススメできる内容だと思います。ただし、 Chapter.6以降については、初学者向けに、もう少し丁寧に書いたほうがいいと思いました。  :====================================================これ以上の入門書は無いのでは太郎丸2016 年 6 月 6 日5 つ星のうち 5.0同シリーズの javascript が大変良かったので、 python でも本書を選びました。大変解りやすいです。他言語の経験者なら 2~ 3 日で、プログラミング初心者でも一週間あれば簡単なプログラムが自作出来るようになると思います。  :====================================================基礎から応用までをきちんとカバーしているので、高専や大学で最初の講義にピッタリではないかと思うkumagawa2016 年 3 月 20 日5 つ星のうち 5.0「基礎 Python 」に 5 つ星をつけてしまったが、こちらの方が読みやすいし理解もしやすい上に、応用までカバーしていると思った。。。====================================================読みやすいミー者2016 年 7 月 7 日5 つ星のうち 5.0とても読みやすいです。初心者でもわかりやすいように、インストール手順などはかなり詳細に書いてくれます。  :

実行結果Python スクリプト( scrape_images.py )を実行したコンソール上に、以下のようなレビュー情報の一覧が表示されます。

Page 21: Pyクロ - PythonではじめるWebクローリング

21Copyright © Skywill inc. All Rights Reserved.

まとめ

所感

スクレイピングの対象とする Web ページの HTML タグ構成は、各Web サイトごとに異なるので、プログラムも、それに対応させる必要がある。

そのため、 Web クローラーの作成には、対象とするページの構成を調査(ブラウザでソース表示して確認など)する作業が発生する(泣)

スクレイピング対象とする Web ページに合わせたプログラムを作る必要がある。

Page 22: Pyクロ - PythonではじめるWebクローリング

22Copyright © Skywill inc. All Rights Reserved.

参考文献

Python による Web スクレイピングRyan Mitchell (著)嶋田 健志(監修)黒川 利明(翻訳)

Python スタートブック辻 真吾(著)