- プログラミング歴42日の素人が書いています。ご注意ください。
#はじめに
Webスクレイピングたのしい!
きほんのやり方をまとめます。
##環境
-
MacBookAir-mid2014
-
macOS-Mojave
-
Python 3.7.4
#「requests」ライブラリのインストール
(インストール済みの場合はスキップ)
ターミナルに以下を打ち込み、ライブラリをインストールします。
requestsはWebサイトから情報の取得を行います。
pip3 install requests
#「Beautiful Soup」ライブラリのインストール
(インストール済みの場合はスキップ)
ターミナルに以下を打ち込み、ライブラリをインストールします。
Beautiful SoupはHTMLの解析を行います。
pip3 install BeautifulSoup4
#あるWebサイトから必要な情報のみ抜き出す
import requests
from bs4 import BeautifulSoup
with open('sample.csv','w') as f:
for i in range(page数):
result = requests.get('https://example.com/page/{}/'.format(i))
print(result)
soup = BeautifulSoup(result.text, 'html.parser')
list = soup.find_all('h2', class_='クラス名')
for h2 in list:
data = h2.a['title']
f.write('{0}\n'.format(data))
##ライブラリのインポート
import requests
from bs4 import BeautifulSoup
##CSVファイルの作成
with open('sample.csv','w') as f:
sample.csv
ファイルを作成。第2引数w
は「書き込み専用」。
##繰り返し処理
for i in range(page数):
page数分繰り返します。(page数とか無いばあいはスキップ)
##webサイト情報の取得
result = requests.get('https://example.com/page/{}/'.format(i))
print(result)
example.comにアクセスします。ループを回すごとに、i
の値が変化し、ページ番号が変化します。
print(result)
はステータスコードを表示します。表示される値が[200]ならhtmlリクエストが正常に処理されています。
##HTMLデータへの変換
soup = BeautifulSoup(result.text, 'html.parser')
BeautifulSoup4を利用して、さきほど取得した文字データをhtmlと認識して扱えるようにパースします。
##任意のクラス名で検索して抜き出す
list = soup.find_all('h2', class_='クラス名')
ここではh2
タグの中で、特定のクラス名がついている要素を検索しています。
##さらにデータの絞り込みとCSVへの書き込み
for h2 in list:
data = h2.a['title']
f.write('{0}\n'.format(data))
find_all
すると配列データになっています。
配列からひとつづつ抜き出して、h2
という変数に格納します。
h2.a
のようにすると、h2
内のa
タグにアクセスすることができます。(子要素へのアクセス)
さらにh2.a['title']
のように続けると、h2
内のa
タグのタイトル属性にもアクセスできます。
たとえば、以下のようなhtmlだったなら、
<h2><a href="http://something.com" title="Go to Somewhare"></a></h2>
Go to Somewhare
の部分を抜き出しています。
最終行は、CSVへの書き込みを行っています。
なお、\n
は改行です。
#まとめ
ライブラリを使うことで、非常にすくないコード量でスクレイピングが実現できます。
また、過度なスクレイピングは相手サーバに迷惑がかかるので気をつけましょう。