no-image

Beautiful Soup×Pythonで、初心者でも10分でできるRSSスクレイピングを解説

今回は、HTMLやXMLファイルからデータを取得するPythonのライブラリであるBeautiful Soupを用いた簡単なスクレイピングプログラムを学んだ。
公式ドキュメントによると、Beautiful Soupは、パーサー(構文解析器)を使って、パースツリー(構文木)の探索、検索、修正を行うことができるライブラリだそうだ。

今回のコード

今回のコードはこちら。

  import bs4
  import lxml
  from bs4 import BeautifulSoup as soup
  from urllib.request import urlopen

  def rss(rss_url):

  	Data = urlopen(rss_url)
  	rss_page = Data.read()
  	Data.close()

  	soup_page = soup(rss_page,"xml")
  	rss = soup_page.findAll("entry")

  	for r in rss:
  		print(r.title.text)
  		print(r.link.get('href'))
  		print("\n")

  rss_url="https://www.nitorihd.co.jp/news/atom.xml"
  rss(rss_url)

解説

まず、必要なモジュールをインポートする。

  import bs4
  import lxml
  from bs4 import BeautifulSoup as soup
  from urllib.request import urlopen

bs4は、Beautiful Soupモジュールである。
このbs4からBeautiful Soupオブジェクトが得ることができる。

lxmlは、PythonでHTML、XMLを処理するための便利なライブラリの一つ。
今回利用するパーサー(構文解析器)である。

urlopenは、Pythonの標準ライブラリであるurllibのメソッドである。
urllib.requestを用いると、URLs (Uniform Resource Locators) を取得することができるようになる。

次に、rssのデータを読み込んで表示させるメソッドを書く。

  def rss(rss_url):
  	Data = urlopen(rss_url)
  	rss_page = Data.read()
  	Data.close()

  	soup_page = soup(rss_page,"xml")
  	rss = soup_page.findAll("entry")

  	for r in rss:
  		print(r.title.text)
  		print(r.link.get('href'))
  		print("\n")

引数となるrss_urlには、rssフィードのURLが入っている。
urlopenメソッドでページを読み込み、BeautifulSoupを用いて、xmlデータを抜き出している。
最後に抜き出したデータの中から、titleタグとlinkタグのhrefの値を抜きだして、表示させている。

仕組みとしてはとてもシンプルだった。
今回は初めてスクレイピングにチャレンジしてみた。
今後もう少し勉強して何か活用できるアイデアが生まれてくれば面白そうだ。

ちなみに今回スクレイピングしているrssはニトリのものである。
投資をしていると、上場企業で最長の31期連続増益中のニトリの情報は気になるので作ってみた。