目次
・復習問題
・スクレイピングとは
・スクレイピングのライブラリについて
0.復習問題
制限時間は5分!
前回の確認問題と同じ内容になっています!
満点とれるよう頑張ってください!
1.スクレイピングとは
スクレイピングとは、Webページから必要な情報を自動で抜き出す作業のことです!
取得したデータは、ファイルやデータベースに保存されます!
1.1スクレイピングの流れ

スクレイピングの流れとしましては3つのステップを踏みます!
まず、最初にWebページのHTMLデータの情報の取得です!
Webページは基本HTML、CSSの2つで構成されています。
HTMLとはWebページの内容を作る骨組みのこと
CSSとはHTMLの表示レイアウトを装飾するための言語のこと
2つ目のステップはデータの抽出です。1つ目で得たデータから必要なデータだけを抽出する必要があります。
最後に抽出したデータの保存をします。
この3つのステップを経て、ようやくスクレイピングができたと言えます!
2.スクレイピングのライブラリについて
上記で説明した通り、スクレイピングには3つのステップを踏みますが、各ステップに長けたライブラリが存在します!
それでは今から各ライブラリについて理解していきましょう!
| ライブラリ | データの取得 | データの抽出 | データの保存 |
|---|---|---|---|
| +Requests | 〇 | ||
| Beautiful Soup | 〇 | ||
| Selenium | 〇 | 〇 | |
| Scrapy | 〇 | 〇 | 〇 |
2.1 Requestsとは
Requestsとは人が使いやすいように作られた、エレガントでシンプルなPythonのHTTPライブラリです。Pythonは標準で同様の機能を持つurllib2を持っていますが、とーーーーーーっても使いにくいといわれています。
それでは簡単な例を見ていきましょう!
まず最初にRequestsライブラリをインストールしましょう!
!pip install requests
インストールできましたか?それでは本命のコードを確認しましょう!
import requests
URL = ''
response = requests.get(URL)
print(response.text)
URL=''の中に試しにヤフーニュースのURLを入れてみましょう!
できましたか??
たくさんのローマ字が出てきていると思いますが、それはすべてヤフーニュースのデータになっています!!
2.2 Beautiful Soup(BS)とは
Beautiful Soup(BS)とは、前章で使ったRequestsで取得したHTMLファイルから望むデータを取得するためのライブラリです。
それではまずBSをインストールしていきましょう!
!pip install beautifulsoup4
それではコードを見ていきましょう!
import requests
from bs4 import BeautifulSoup
import re
#初回のみ
target_url = "https://www.yahoo.co.jp/"
#Requestsを使って、webから取得
r = requests.get(target_url)
#要素を抽出
soup = BeautifulSoup(r.text, 'lxml')
#HTMLファイルとして保存したい場合はファイルオープンして保存
with open('originDataOld.html', mode='w', encoding = 'utf-8') as fw:
fw.write(soup.prettify())
#soup.find_allを用いてリンク先が「news.yahoo.co.jp/pickup」の項目を全て取得
elems = soup.find_all(href=re.compile("news.yahoo.co.jp/pickup"))
for e in elems:
print(e.getText())
# 出力結果
石破内閣の閣僚発表 初入閣は13人NEW
政権運営に幕 岸田氏は成果を強調
上海スーパーで切り付け 18人死傷
備蓄米放出なら混乱招いた 農水相NEW
福井沖の遺体は中3か 祖父の思いNEW
各社で内定式 半数企業は募集継続
DeNA、大和など10選手に戦力外
台風18号影響 イベント中止相次ぐNEW
ぱっと見、めちゃくちゃ難しそうですよね!すべてのコードを理解する必要はありません!
全体の流れをつかんでくれたらそれでOKです!
全体の流れ
1.指定されたURLからHTMLを取得する。
2.取得したHTMLを解析して、特定のリンク(news.yahoo.co.jp/pickupを含むリンク)を抽出。
3.抽出されたリンクのテキストを出力し、HTML全体をファイルに保存する。
これにより、Yahoo!トップページにあるニュースのリンクを取得し、それらのテキストを表示したり、HTMLファイルに保存することができます。詳しいコードの解説は下に書いているので参考にしてください!
r = requests.get(target_url)
ここでは、requestsライブラリを使って指定されたURLからHTMLデータを取得しています。
soup = BeautifulSoup(r.text, 'lxml')
BeautifulSoupライブラリを使ってウェブページのHTMLデータを解析し、使いやすい形に変換するためのものです。BeautifulSoupはその材料をきれいに整理して料理(データ解析しやすい形)をするための道具です。
BeautifulSoupは、HTMLやXMLのデータを「スープ」のように解析して、簡単に情報を取り出せるようにするためのPythonライブラリです。
r.textは、requests.get(target_url)で取得したウェブページのHTMLデータ(テキスト形式)を指します。
わかりやすく例えると、r.textはただの材料(未加工のHTMLデータ)で、BeautifulSoupはその材料をきれいに整理して料理(データ解析しやすい形)をするための道具です!
lxmlはHTMLやXMLの解析(パース)を高速に行うためのパーサーの1つです。
with open('originDataOld.html', mode='w', encoding = 'utf-8') as fw:fw.write(soup.prettify())
with openを使って、新しいHTMLファイルoriginDataOld.htmlを作成し、解析されたHTMLデータを保存しています。
soup.prettify()は、HTMLデータを見やすい形式で整形し、これをファイルに書き込んでいます。
utf-8でエンコーディングすることで、文字化けを防いでいます。