![見出し画像](https://assets.st-note.com/production/uploads/images/148179464/rectangle_large_type_2_a67643c3eea4b1f15b2b61ee14e03139.png?width=1200)
Webスクレイピング勉強③~BeautifulSoup~
引き続き
1.BeautifulSoupでWEBページを読み込む
requestsとbeautifulsoup4をインストール
![](https://assets.st-note.com/img/1721313230850-9pY76eS3fg.png?width=1200)
URLを指定し、そのページ情報を取得する
import requests
from bs4 import BeautifulSoup
url = 'https://scraping-for-beginner.herokuapp.com/udemy'
res = requests.get(url)
res.text
現状は単なる文字列
![](https://assets.st-note.com/img/1721313347596-yuV4ZvJMXx.png?width=1200)
BeautifulSoupでHTMLとして読み込ませる
soup = BeautifulSoup(res.text, 'html.parser')
soup
綺麗な形になった
![](https://assets.st-note.com/img/1721313562872-MnyWgKvOzN.png?width=1200)
下記関数でインデントも込みで解析してくれる
print(soup.prettify())
![](https://assets.st-note.com/img/1721313645068-mvBtkjODmm.png?width=1200)
2.ページ内の特定の要素を取得する
ページ内の「受講生の数」を取得したい。→<p>タグかつclass="subscribers"
![](https://assets.st-note.com/img/1721314030161-xuvxddzjtJ.png?width=1200)
まずは該当のタグを取得
読み込んだHTML内の全pタグを取得
soup.find_all('p')
リスト形式で取得される
![](https://assets.st-note.com/img/1721314122554-YN9UDoevYE.png?width=1200)
下記の指定をすることで、取得した全pタグのうち、classが指定した名前(ここではsubscribers)の要素だけを抽出できる。
subscribers = soup.find_all('p', attrs={'class':'subscribers'})
取得できた
![](https://assets.st-note.com/img/1721314375151-tUhInsncQd.png?width=1200)
取得した要素のtextを取得することで、値を取得できる
![](https://assets.st-note.com/img/1721314685762-nBto8agiHr.png)
取得した文字列のうち、数値を抽出する
取得した文字列を分割して、int形に変換
subscribers[0].text.split(':') #:でテキストを分割
subscribers[0].text.split(':')[1] #分割した2つのうち2つ目を表示
int(subscribers[0].text.split(':')[1]) #int型に変換
同様にレビューの数も取得する
![](https://assets.st-note.com/img/1721315110533-SDcl2DSgIW.png?width=1200)
同じ要領で取得完了
![](https://assets.st-note.com/img/1721315212043-kV9SkWmYxQ.png?width=1200)
CSSセレクタによる取得
find_allではなくsoupのselect関数でクラス名を指定することでも取得は可能
soup.select_one('.subscribers').text
![](https://assets.st-note.com/img/1721315527321-uxA7z9DJbX.png)
以上。勉強になりました。
この記事が気に入ったらサポートをしてみませんか?