※このページではアフィリエイト広告を利用しています

【Python応用】BeautifulSoupとurlopenによる簡単スクレイピング方法

Python

Webスクレイピングを行う際、指定のサイト情報をurlopen()関数、HTML解析をBeautifulSoupとして、組み合わせて使用する場合が多いです。

ここでは、「BeautifulSoup」と「urlopen」を用いたスクレイピング方法について解説しています。

この記事の対象

  • Webスクレイピングに挑戦したい方
  • urlopenの使用方法を知りたい方
  • BeautifulSoupの使用方法を知りたい方
スポンサーリンク
スポンサーリンク

行ったこと

honto」サイトにアクセスして<a>タグとhrefをスクレイピングして出力してみました。

プログラムの流れ

  1. URLの指定
  2. パーサー指定
  3. HTML解析
  4. 取得情報の出力

プログラム

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のデータを取得しています。

詳しい使用方法は以下をご参照下さい。

>>>urllibを用いたスクレイピング方法

#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」の記事タイトルをスクレイピングする方法について解説しています。
タイトルとURLをコピーしました