pythonスクレイピング 基本③
実例で実験してみよう コピペで学べます
今回はタレント辞書に載っている「20代の女優一覧」を例に紹介していきます。
取得する情報は以下
1.名前
2.職業(モデル、女優、タレント)
3.年齢
4.詳細ページのURL
具体的に、サイト内で以下のデータをスクレイピングして、最終的にCSV出力していきます。
STEP① : スクレイピングで、データを抽出する(※いつもどおり)
今回必要になる「名前、職業、年齢、詳細ページURL」は、以下のコードでスクレイピングできます。
code:test01
import requests
from bs4 import BeautifulSoup
r = requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser')
actors = soup.find('ul', class_='list').find_all('li')
for actor in actors:
prof = actor.find('div', class_='right')
name = prof.find('a', class_='title').text
url = prof.find('a', class_='title').get('href')
occupation = prof.find('a', class_='job').text
age = prof.find('span', class_='age').text
print('****************')
print(name)
print(url)
print(occupation)
print(age)
print()
次にCSVを作成するためのヘッダー部分を作成します。
なぜヘッダーを作成するのかというと、取得したデータをそのままCSVに書き込むと、各列にどんなデータが格納されているのか分からないからです。
人名や職業なら見れば分かるかもしれません。
でも年齢とかURLについては、やはり説明がないと意味が通じません。
そのため、スクレイピングで取得したデータをCSVに書き込むときヘッダーを作成してあげます。
ヘッダー追加のコードが必要になります。
STEP②: 抽出したデータを、CSVに書き込む
最後にスクレイピングしたデータをCSVに書き込んでいきましょう。
先ほど準備したヘッダー情報を先に定義しておいて、そのあとでスクレイピングしたデータをCSVに書き込みます。
以下のようにコードなります。
code:test02
import csv
import requests
from bs4 import BeautifulSoup
r = requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser')
actors = soup.find('ul', class_='list').find_all('li')
with open('actors.csv', 'w', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow(HEADER)
for actor in actors:
prof = actor.find({ 'div', class_='right'})
name = prof.find('a', class_='title').text
url = prof.find('a', class_='title').get('href')
occupation = prof.find('a', class_='job').text
age = prof.find('span', class_='age').text
writer.writerow(row)
STEP③: 確認して完成
code:test03
import pandas as pd
df = pd.read_csv('actors.csv')
print(df)
上記のコードを実行してな出力結果を確認。
しっかりとCSVファイルを作成できていることがわかります。
以上です。