Python初心者がノンプロ研でPython学んでみた vol.5

こんにちは、な～です。ノンプロ研でPythonを学び始めました。その学びについての第5回目です。今回は、スクレイピング基礎について学びました。私にとっては、初めてのスクレイピングです。

# 今回の内容
- スクレイピングの基礎知識
- HTTP通信 - requestsモジュール
- HTML解析 - beautifulsoup4モジュール

# スクレイピングの基礎知識
スクレイピングとは、Web上のデータを収集することを言います。
Web上で公開されている情報としてもスクレイピングを行う際には注意しなくてはならないことがあります。
![20211208初心者講座Pythonコース-05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1208544/fb39dddd-f729-1a73-dbf8-f922e1f39b00.png)
相手の立場に立って節度あるスクレイピングをすることが大切そうです。

# HTTP通信 - requestsモジュール
まずは、Pythonによるスクレイピングに必要な知識の1つ目、HTTP通信について学びました。
HTTP通信とは、私たちの使っているパソコンにあるブラウザと、インターネット上にあるWebサーバーとがデータをやり取りするための仕組みです。
ホームページのURLの先頭は、「HTTP」からはじまりますよね。
![20211208初心者講座Pythonコース-05 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1208544/68d88b2a-8a06-d5dd-4d84-4849c5299015.png)
スクレイピングの手順としては、
１．URLにリクエストをする。
２．Webサーバーからのレスポンスを受け取る。
３．レスポンスからほしいデータを取り出す。
この手順の１と２のことをするのが**requestsモジュール**です。

**requestsモジュール**は同梱モジュールですので、`import requests
`モジュールをインポートするだけですぐ使えるようになります。
![20211208初心者講座Pythonコース-05 (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1208544/6d5bafe7-2f9f-fb4b-d4c9-b60ef52838f0.png)
requestsのgetメソッドは、URLを渡してあげると、Responseオブジェクトが返ってきます。
![20211208初心者講座Pythonコース-05 (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1208544/7dc62053-5572-a9e4-f70a-488625bebc4e.png)
また、レスポンスに含めれるコンテンツはtextで見ることができます。
中身は簡単に取得できますが、HTMLで書かれているため、目視で確認するのは大変ですが、この先、いろいろすることによって、必要な情報のみを取得して成形することができそうです。
![20211208初心者講座Pythonコース-05 (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1208544/b9996cc7-cb5d-5009-c59e-e28e208767ae.png)
レスポンスのステータスコードを確認することで、このレスポンスが正常処理で受け取れたものかの確認ができます。また、リクエストが成功しなかったらエラーを起こすことも可能です。`Responseオブジェクト. raise_for_status()`で、エラーが起こせたら、エラーを処理する方がフローが簡単になる場合もありますよね。
検索をしたり、値を渡して処理をするとURLに検索文字列が付加されてリクエストを送ります。この文字列をクエリ文字列と言います。
![20211208初心者講座Pythonコース-05 (5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1208544/471a5a3c-29af-9833-4102-8ad40d6361fc.png)
パラーメータを渡してリクエストができます。
![20211208初心者講座Pythonコース-05 (6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1208544/b2c6063f-b158-84ea-9c09-bdd3a438f272.png)
パラメータを辞書形式の変数にして付与するとさまざまな情報を取得できるようになりますね。

# HTML解析 - beautifulsoup4モジュール
requestsモジュールで、Web上の必要なレスポンスが取得できましたので、レスポンスから欲しいデータを取り出します。
レスポンス（HTML）から欲しいデータを取り出す解析をするのが**beautifulsoup4モジュール**です。
HTMLとは、HyperText Markup Language＝Webページを記述するためのマークアップ言語です。「タグを」使って「マーク」をつけます。
![20211208初心者講座Pythonコース-05 (7).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1208544/be5944a2-bd5b-a1da-ef5a-ef10c502398f.png)
![20211208初心者講座Pythonコース-05 (8).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1208544/bccd4f87-86fd-d029-cd44-4bfd602cb3da.png)
ブラウザは、HTMLドキュメントを解析・変換してWebページとして表示するソフトウェアです。レスポンスの内容を目視でみて理解するのは大変、そこで登場するのが、**beautifulsoup4モジュール**です。
こちらも、モジュールをインポートして利用します。モジュール名が長いのでbs4に省略して利用できます。
![20211208初心者講座Pythonコース-05 (10).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1208544/740caca1-3cd0-02ea-db37-79f687e30991.png)
html.parserというHTMLの構文解析を行うツールを利用してBeautifulSoupオブジェクトを生成します。
BeautifulSoupオブジェクトは、ドキュメント全体のツリー構造を表します。
findメソッドやfind_allメソッド、sekectメソッドを利用して必要なTagオブジェクトを抽出して利用できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1208544/ad1316be-092b-2f47-53dd-c6453604305d.png)
Chromeのデベロッパーツールを使って、要素を探す方法を学びました。
ブラウザで、ショートカット`Ctrl + Shift + I`で、デベロッパーツールがひらきます。画像にある要素を選択アイコンをクリックして、欲しい要素をクリックして選択します。Elementsタブで内容を確認して、必要な情報にたどり着くよう検索したり、たどったりします。必要な情報を取得できるタグやクラスを探しましょう！

# まとめ
今回は、スクレイピング基礎について学びました。初めてのスクレイピングが無事できました。
講座のあと、会社のブログのaタグを取得するコードを書いて無事にURLやタイトルの一覧が取得できました。

次回は、スクレイピング実践ということで、もっといろいろなことを学べそうです。

今回もツイートまとめました！
[ノンプロ研 Python初心者講座第5回目 byな～](https://togetter.com/li/1815216)