no-image

Python初心者が、Beautiful Soupではてぶ人気記事をWEBスクレイピング

前回のコードを少し改変して。
今回は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.h3
  	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.h3
  	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

おまけ

このプログラムの実行結果がこちら。

 

以上。
コードとしてはとてもシンプルだが、中々汎用性が高そうだ。
スクレイピングが思ったよりもとっつきやすく、とても楽しい。