投稿日: | 最終更新日:
Pythonのウェブスクレイピング環境を作る(Requests、Beautiful Soup4)
Pythonでスレイピングを行います。その前段階でサードパーティ製パッケージ(Requests、Beautiful Soup4)環境を作ります。
ウェブスクレイピング環境
スクレイピングは、Python3の標準ライブラリでも可能です。しかしもっと便利なスクレイピング環境を作るため、以下のサードパーティ製のパッケージを利用します。
Requests
人が使いやすいHTTPクライアントです。指定したURLとにアクセスし、HTMLのデータを取得するのに使用します。
Beautiful Soup4
HTMLの内容を解析するパッケージです。Requestsで取得したHTMLのデータを解析し、必要な情報を取得するために使用します。
前提
仮想環境、本番環境どちらでも構いませんが、CentOS7にPython3とvenvがインストールされているものとします。VPSに作った方法ですが、共通ですので以下をご参考に。
ホスト環境
ホスト環境は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へアクセスします。
高機能なレスポンスを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
- Python 114
- 制作 54
- RaspberryPi 41
- Django 40
- WordPress 40
- Linux 27
- VPS 22
- JavaScript 21
- PHP 20
- HTML・CSS 19
- AWS 16
- 仮想環境 15
- レスポンシブデザイン 13
- マイコン 11
- WEB全般 11
- 動画製作 9
- Webサービス 8
- 統合開発環境 8
- 機械学習 8
- PyCharm 7
- jQuery 7
- AfterEffects 7
- 起業・設立 7
- Django REST framework 6
- C# 6
- デザイン 6
- SEO 6
- pydata 6
- Visual Studio 5
- 数学 5
- 携帯サイト 5
- heroku 5
- Mac 5
- illustrator 5
- node.js 5
- Anaconda 5
- Nginx 4
- Jupyter Notebook 4
- インフラ 4
- Google Colaboratory 4
- symfony 4
- Webスクレイピング 3
- photoshop 3
- Go言語 3
- PC 3
- ツール 3
- Docker 3
- facebook 3
- 作業効率化 3
- データベース 3
- Cloud9 3
- コマンド 2
- micro:bit 2
- Kali Linux 2
- Webサーバー 2
- MariaDB 2
- ドローン 2
- コンテナ 2
- DaVinci Resolve 2
- ネットワーク 2
- Java 2
- movie 2
- PCDJ 2
- 音楽 2
- XSERVER 2
- Ansible 1
- Vue.js 1
- JSON 1
- Bootstrap 1
- バージョン管理システム 1
- SSL 1
- S3 1
- ムームードメイン 1
- ネットワーク 1
- アニメーション 1
- D3.js 1
- Rhino 1
- アニメ 1
- git 1
- windows 1
- アクセス解析 1
- スマートフォン 1
- アフィリエイトノウハウ 1
- 知識 1
- TypeScript 1
- 役立つ本・書籍 1
- データサイエンス 1
- ESP32 1
- AI 1
- ownCloud 1
- API 1