前回のコードを少し改変して。
今回はBeautiful Soupを用いて、Webサイトのスクレイピングを行う。
前回の記事:
Beautiful Soup×Pythonで、初心者でも10分でできるRSSスクレイピングを解説
スクレイピング元に選んだのははてなブックマーク。
今回は、その日のはてなブックマークのお気に入りユーザー数20以上の人気記事を抽出するプログラムを書いた。
今回のコード
今回書いたコードはこちら。
import requests from bs4 import BeautifulSoup r = requests.get('http://b.hatena.ne.jp/') content = r.content soup = BeautifulSoup(content, 'html.parser') for div in soup.select("div.entrylist-contents-main"): title = div.h2 url = div.a user = div.span user_num = user.getText().split(" ") if int(user_num[0]) >= 20: print(title.getText(),end="") print(url.get('href'),end="") print(user.getText(),end="") else: next
コードの解説
まずは前回同様、必要モジュールのインポートからURLの読み込み。
import requests from bs4 import BeautifulSoup r = requests.get('http://b.hatena.ne.jp/') content = r.content soup = BeautifulSoup(content, 'html.parser')
前回と違うのは、ページを読み込むのに、urlibではなく、requestsを用いてる点。
標準モジュールだったurlibとは異なり、requestsは別途インストールが必要だが、ページの読み込みを簡単に行えるようにしてくれる、urlibの上位互換的モジュールである。
今回は、Beautiful SoupにHTMLファイルを読み込ませている。
続いて、取得したい情報を持つ各要素の読み込み。
selectメソッドで実装している。
for div in soup.select("div.entrylist-contents-main"): title = div.h2 url = div.a user = div.span user_num = user.getText().split(" ")
最後に、お気に入り登録者数が20以上の項目だけコンソール上に表示させる。
if int(user_num[0]) >= 20: print(title.getText(),end="") print(url.get('href'),end="") print(user.getText(),end="") else: next
おまけ
このプログラムの実行結果がこちら。
以上。
コードとしてはとてもシンプルだが、中々汎用性が高そうだ。
スクレイピングが思ったよりもとっつきやすく、とても楽しい。