Pythonプログラムの基本（ライブラリの使用、WEB情報の取得）

<h4>前提など</H4>

**対象：**　
　・Python初学者が対象
　・過去記事[「Pythonプログラムの基本（はじめの一歩）」](https://qiita.com/okamoto0/items/15967e68d6e76d7e53a9)を履修済であること。

**開発環境：**　Windows、Visual Studio Code、Python3系
　　　　　　　[前々回構築した開発環境で学習を進めます。](https://qiita.com/okamoto0/items/f63b7726626e57026f99)
　　　　　　　※Windows10での使用を前提とするが、他OSでも大きく変わらないはずです。

**前提：**　初学者は公式ドキュメントを元に学習すべきであるが、
　　　　社内勉強会を前提としているため、基本を掻い摘んで駆け足で説明します。
　※pipのupdateを促すメッセージなど表示されていますが今回は無視します。

　　　　[★Python公式ドキュメントへのLINK★](https://docs.python.org/ja/3/)

<h4>今回のテーマ</H4>
今回ライブラリの使用を勉強するために、WEBからの情報取得を行います。

<h4>WEBから情報取得について</H4>
WEBページから情報を取得する技術のことをWEBスクレイピングと言います。<BR>
そもそも、WEBページはHTMLなどの文字列を受信してブラウザで表示していますので、受信した文字列の欲しいところだけ抜き出せば良いだけです。
注意：
WEBスクレイピングを禁止しているサービスも有りますのでPG組む前に目的サイトの注意事項を要確認です。
X（Twitter）　、　AMAZON　などは明確に禁止されている。

<h4>ライブラリの使用</H4>
WEBからの情報取得は色々な方法が有りますが、今回は、　　requestsとBeautifulSoupと言うライブラリを使用します。

　
前回と同様にVSを使用してpythonファイルを作成して進めます。
以下の様に　test_py.py　ファイルを作成します。
![vsc_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102625/fdef3649-59e9-b2dd-035f-84e86769c32f.png)
VS下部ウィンドのターミナルからpipコマンドではrequestsをインストールします。
```py
pip install requests
```
インストール成功すると以下のように成ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102625/20d00dff-405c-4206-b2cd-285fd3277574.png)

<h4>WEBページ情報を取得する</H4>
Requestsライブラリを使用して、目的のWEBサイトのURLを指定してHTMLテキストを取得します。
<BR>
RequestsはPythonでのHTTPリクエストを簡単で使い易くした物です。
<BR>
以下のソースをtest_py.pyに打ち込んでください。

```py
import requests
get_data = requests.get('https://www.chancelab.jp/')
print(get_data.text)
```

1行目の
```py
import requests
```
の記述により、requestsを利用できるようになります。
2行目の
```py
get_data = requests.get('https://www.chancelab.jp/')
```
の記述は、指定のURLへリクエストしタグ情報(HTML)を取得します。

実行結果は下部ウィンドのターミナルに出力されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102625/9fc0dcda-517b-7d48-fb43-eca476f3b47a.png)

<h4>特定の情報を取得する－１</H4>
BeautifulSoupライブラリを使用して特定の情報だけを取得します。<BR>
BeautifulSoupはいわゆるXMLパーサを使い易くした物です。<BR>
以下の様にpipコマンドでインストールしてください。

```py
pip install beautifulsoup4
```
↓　実行後の表示
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102625/9bd5ab06-e3d7-8398-7ec4-a08fd9934345.png)

test_py.pyを以下のように書き換えてください。

```py
import requests
from bs4 import BeautifulSoup
get_data = requests.get('https://www.chancelab.jp/')
soup_data = BeautifulSoup(get_data.text, 'html.parser')
print(soup_data.p)    # pタグの文字列を取得する　※最初の行しか取れない
```
2行目の
```py
from bs4 import BeautifulSoup
```
の記述は、bs4モジュール内のBeautifulSoupだけをimportしています。

4行目の
```py
soup_data = BeautifulSoup(get_data.text, 'html.parser')
```
の記述は、3行目で取得したHTMLをタグとして扱いやすい形にパースして、soup_data 変数に保存しています。

5行目の
```py
print(soup_data.p)
```
の記述は、コメントにあるように、一番最初に見つけたpタグを指定(取得)して、print出力しています。

↓　実行後の表示
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102625/6e258b08-c613-cc1e-91cc-33d6944af152.png)

<h4>特定の情報を取得する－２</H4>
「特定の情報を取得する－２」の実装の様に、タグ指定での取得は最初に見つけたタグしか取得できません。
セレクタを使用して取得してみましょう。<BR>
test_py.pyを以下のように書き換えてください。

```py
import requests
from bs4 import BeautifulSoup
get_data = requests.get('https://www.chancelab.jp/')
soup_data = BeautifulSoup(get_data.text, 'html.parser')
p_teams = soup_data.select('p')	# pタグの全行を取得する
for p_man in p_teams:
    print(p_man)
```

5行目の
```py
p_teams = soup_data.select('p')	
```
の記述は、soup_datap内のpタグを全てを取得して、p_teams変数（リスト）に保存します。

6～7行目の
```py
for p_man in p_teams:
    print(p_man)
```
の記述は、
6行目、p_teamsリストから一件ずつp_man変数に取り込み、件数分繰り返します。最後まで読み終わったら繰り返しは終了です。
7行目、インデントされた print(p_man)は、p_man変数のprintを行いますが、前述のループで繰り返し処理されます。

↓　実行後の表示
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102625/4f12b758-3789-7b1a-0683-cc4c4cd2807d.png)
実行結果から、pタグが3箇所あったことが分かります。

ザックリですが、上記の応用でWEBスクレイピングは可能ですよね。

<h5>参考：</H5>

[★便利なBS4ドキュメント★](https://www.crummy.com/software/BeautifulSoup/bs4/doc/)

<BR>
<BR>

**今日はココまで～**