ホーム >  Python >  Pythonのウェブスクレイピング環境を作る(Requests、Beautiful Soup4)

投稿日:   |  最終更新日:

Pythonのウェブスクレイピング環境を作る(Requests、Beautiful Soup4)

PythonWebスクレイピング

Pythonでスレイピングを行います。その前段階でサードパーティ製パッケージ(Requests、Beautiful Soup4)環境を作ります。

ウェブスクレイピング環境

スクレイピングは、Python3の標準ライブラリでも可能です。しかしもっと便利なスクレイピング環境を作るため、以下のサードパーティ製のパッケージを利用します。

Requests

人が使いやすいHTTPクライアントです。指定したURLとにアクセスし、HTMLのデータを取得するのに使用します。

Beautiful Soup4

HTMLの内容を解析するパッケージです。Requestsで取得したHTMLのデータを解析し、必要な情報を取得するために使用します。

前提

仮想環境、本番環境どちらでも構いませんが、CentOS7にPython3とvenvがインストールされているものとします。VPSに作った方法ですが、共通ですので以下をご参考に。

ConoHaのVPSにPython3環境を作る

ホスト環境

ホスト環境はUbuntuですが、WindowsでもMacでもOKです。

OS Ubuntu 16.04.1 LTS 64bit
Virtualbox 5.1
Vagrant 1.9.5

ゲスト環境

OS CentOS 7.1.1503
Python 3.6.1
pip 9.0.1
Webサーバ Apache/2.4.6 (CentOS)
mod_wsgi 4.5.17

パッケージインストール

①venvの仮想環境を作ります。

python3 -m venv env
. env/bin/activate

②Requests、Beautiful Soup4パッケージをインストールします。

pip install --upgrade pip
pip install requests
pip install beautifulsoup4

③パッケージがインポートできるか確認します。エラーが何も表示されなければ成功です。

python

>>> import requests
>>> import bs4

RequestsでWebページ取得

作成した仮想環境で、Requestsを使用して当サイトトップページ(https://hombre-nuevo.com)のデータを取得します。

①venvの仮想環境から、そのままコマンドでpythonの対話モードを起動します。

python

②以下のコードを記述して実行します。

>>> import requests
>>> r = requests.get('https://hombre-nuevo.com')
>>> r.status_code
200
>>> r.text[:50]
'<!DOCTYPE html>\n<!--[if lt IE 7]>      <html class'

RequestsでWebページ取得

>>> r = requests.get('https://hombre-nuevo.com')
>>> r.status_code
200

サイトを取得してステータスコードを表示します。

>>> r.text[:50]
'<!DOCTYPE html>\n<!--[if lt IE 7]>      <html class'

先頭の50文字を取り出します。

RequestsでJSON形式のAPIレスポンスを取得

JSON形式でレスポンスが取得できる場合があります。JSONデータは、「json()」メソッドでJSONをデコードしたデータ(辞書リスト)が取得できます。

①以下のサイトのAPIにアクセスします。「python」というキーワードを含むイベントの一覧を取得します。JSON形式データを取得します。

https://connpass.com/about/api/

②コマンドラインからpythonを起動します。

python

以下のコードを記述します。

>>> import requests
>>> r = requests.get('https://connpass.com/api/v1/event/?keyword=python')
>>> data = r.json()
>>> for event in data['events']:
...     print(event['title'])
... 

以下のような結果が表示されます。

【もくもく】Pythonで作ったものをみんなで発表して、質問し合おう!
Unagi.py 勉強会5枚目~Pyコーディング力強化編~
【少人数制】統計基礎理論とPython による可視化入門
【少人数制】Python によるスクレイピング ハンズオン
WEB+DB PRESS Vol.104をみんなで読む会 #2@福岡
[秋葉原] TensorFlowではじめるDeepLearning実践入門勉強会 CNN実装と可視化
第31回 CoderDojo札幌
Python Boot Camp in 岩手
TDD Boot Camp in 香川 #1
【LT枠有り】第2回 子育てエンジニア Hack共有会

各種HTTPメソッド指定方法

Requestsにはパラメータ付POSTも送信でき、他にもPUT、DELETE、HEAD、OPSIONSのHTTPメソッドにも対応しています。以下のように指定します。

>>> payload = {'key1':'value1', 'key2':'value2'}
>>> r = requests.post('https://httpbin.org/post' data=payload)
>>> r = requests.put('https://httpbin.org/put' data=payload)
>>> r = requests.delete('https://httpbin.org/delete')
>>> r = requests.head('https://httpbin.org/get')
>>> r = requests.options('https://httpbin.org/get')

ベーシック認証・ダイジェスト認証のGETリクエスト

GETリクエストのパラメータを辞書で指定し、URLを作成します。ベーシック認証・ダイジェスト認証などの認証にもたいお指定します。テストとして、httpbinへアクセスします。

httpbin

高機能なレスポンスをJSONで返してくれるサイトです。トップページに返してくれるエンドポイントの一覧の説明があります。

①以下のコードを記述します。GETリクエストのパラメータを辞書で指定し、URLを作成します。

>>> import requests
>>> payload = {'key1':'value', 'key2':'value2'}
>>> r = requests.get('https://httpbin.org/get', params=payload)
>>> r.url

'https://httpbin.org/get?key1=value&key2=value2'

②続いて、以下のコードを記述します。認証がうまくいくか試してみます。

>>> r = requests.get('https://httpbin.org/basic-auth/user/passwd', auth=('user', 'passwd'))
>>> r.status_code

200
トラックバック用のURL
プロフィール

名前:イワサキ ユウタ 職業:システムエンジニア、ウェブマスター、フロントエンドエンジニア 誕生:1986年生まれ 出身:静岡県 特技:ウッドベース 略歴 20

最近の投稿
人気記事
カテゴリー
広告