Webスクレイピングを行う際、指定のサイト情報をurlopen()関数、HTML解析をBeautifulSoupとして、組み合わせて使用する場合が多いです。
ここでは、「BeautifulSoup」と「urlopen」を用いたスクレイピング方法について解説しています。
この記事の対象
行ったこと
「honto」サイトにアクセスして<a>タグとhrefをスクレイピングして出力してみました。
プログラムの流れ
- URLの指定
- パーサー指定
- HTML解析
- 取得情報の出力
プログラム
from bs4 import BeautifulSoup
import urllib.request as urreq
#1---siteを指定
url ="https://honto.jp/ranking/gr/bestseller_1101_1201_011.html"
ans = urreq.urlopen(url)
#2---パーサー指定
soup = BeautifulSoup(ans,"html.parser")
#3---<a>タグを取得
ans_word = soup.find_all("a")
num_count =0
for a in ans_word:
num_count += 1
if num_count <= 10:
href = a.attrs['href']
#4---リンクの取得
text = a.string
#5---文字列の取得
print(str(num_count),text,">>>>",href)
else:
break
以下はプログラムの説明です。
#1---siteを指定
url ="https://honto.jp/ranking/gr/bestseller_1101_1201_011.html"
ans = urreq.urlopen(url)
1の部分ではサイトのURLを指定しています。「urlopen」で指定したURLのデータを取得しています。
詳しい使用方法は以下をご参照下さい。
#2---パーサー指定
soup = BeautifulSoup(ans,"html.parser")
2の部分ではパーサーを指定しています。HTMLを解析するという指定をしています。
#3---<a>タグを取得
ans_word = soup.find_all("a")
num_count =0
for a in ans_word:
num_count += 1
if num_count <= 10:
href = a.attrs['href']
3の部分では、全ての<a>タグを「soup.find_all()」関数で探索してfor構文で任意の数だけ回しています。
「soup.find_all()」はid属性を引数にする特徴があります。ちなみにCSSセレクタで探索する方法もあります。詳しい内容は以下をご参照下さい。
>>>BeautifulSoupで複数要素をid属性で探索する方法
attrs[href]はリンクを取得しています。
#4---リンクの取得
text = a.string
4の部分では、取得したリンク情報を「.string」として文字列として取得しています。
#5---文字列の取得
print(str(num_count),text,">>>>",href)
5の部分では取得した情報を出力しています。
結果
1 None >>>> https://honto.jp/
2 電子書籍ストア >>>> https://honto.jp/ebook.html?cid=ip_hb_hm_03
3 小説・文学 >>>> /ebook/gr/29001000000.html?cid=ip_hb_sm_10
4 経済・ビジネス >>>> /ebook/gr/29007000000.html?cid=ip_hb_sm_11
5 男性コミック >>>> /ebook/gr/29004150000.html?cid=ip_hb_sm_12
6 女性コミック >>>> /ebook/gr/29004160000.html?cid=ip_hb_sm_24
7 ライトノベル >>>> /ebook/gr/29037000000.html?cid=ip_hb_sm_13
8 暮らし・実用 >>>> /ebook/gr/29006000000.html?cid=ip_hb_sm_14
9 雑誌 >>>> /ebook/gr/29031000000.html?cid=ip_hb_sm_15
10 BL(ボーイズラブ) >>>> /ebook/gr/29029000000.html?cid=ip_hb_sm_26
良く使用するHTML用語
補足事項として、良く使用するHTML用語になります。
項目 | 内容 |
h1~h6 | 見出し |
p | 段落 |
blockquote | 引用文 |
div | ブロックレベル要素(複数の要素をまとめたもの) |
a | リンクを意味するタグ |
href | <a>タグ内のリンク先を示している属性 |
ul | 箇条書き設定(行頭に箇条書き記号が付く) |
ol | 箇条書き設定(行頭に番号が付く) |
その他、スクレイピング方法
項目 | 内容 |
青空文庫における任意の作家の作品リストのスクレイピング | 青空文庫における指定した作家の掲載作品リストとurlをスクレイピングして、excelファイルに保存する方法について解説しています。 |
「BeautifulSoup」を用いた株価のスクレイピング | 「株式投資メモ」さんの株価情報をスクレイピングして、excelファイルに保存する方法について解説しています。 |
電撃文庫における毎月の書籍情報のスクレイピング方法 | 「電撃文庫」の毎月の書籍情報をスクレイピングしてexcelファイルに保存する方法について解説しています。 |
ITmediaのニュースのスクレイピング | 「ITmedia」のニュースを5つスクレイピングする方法について解説しています。 |
note「編集部のおすすめ」記事のタイトルをスクレイピング | 「note」の編集部のおすすめ記事のタイトルのスクレイピングする方法について解説しています。 |
TechCrunchの記事タイトルをスクレイピング | 「TechCrunch」の記事タイトルをスクレイピングする方法について解説しています。 |