フクロウメンバーによる日常をご紹介いたします。
Posted by fukurou
こんにちは!
フクロウのブログがスタートして1か月ほど経過しました。
毎回のように”お役に立てるかはわかりませんが・・・”と言いつつも、
知識やメモの集約として振り返るツールという意味では
少しずつ役割を持たせられているのではないかと感じております。
さて、今回は「Pythonでクローラーを作ってみたい!」というときに使える
ライブラリとその方法をご紹介したいと思います。
美しいスープ・・・まさに「何それ、おいしいの?」ですね。
BeautifulSoup は、スクレイピング(Webサイト上にある情報を収集すること)
のために必要な関数が使えるライブラリ(モジュール)です。
インストールされていない場合は
pip install beautifulsoup4
でインストールしておきましょう。
Jupyter Notebookでインストールするには
pipの前に「!」をつけます。
!pip install beautifulsoup4
こう。
画像はJupyter Notebook(何これ?って人は前回の記事をご参照ください!!)で実行した際の画面です。
まずは必要なモジュールをimportしていきましょう。
この4つを使用します。
BeautifulSoupのimportは、
モジュール名の大文字・小文字を間違えたり、BeautifulSoapに4をつけたりすると
「そんなモジュールありませんよ!」と怒られるので注意。
うまくいきました。
次に変数urlに、スクレイピングしたいサイトのURLを代入。
今回は、フクロウのブログの記事一覧画面から記事タイトル(h4タグ)を遡って取得していきます。
実行すると、記事のタイトルがずらりと表示されています!
以下、ここまでの内容をまとめたサンプルコードです。
import time import sys #システムのライブラリをインポート import requests #HTMLを取得する from bs4 import BeautifulSoup #モジュール名bs4 よりbeautifulsoupをインポート url = 'http://2960.jp/blog/' res = requests.get(url) soup = BeautifulSoup(res.content,'html.parser') records = soup.select('h4') for record in records: print(record.get_text())
複数のページを遡っていって取得する場合は以下の通り。
変数next_pageを使って取得したリンク先(次の10件へ)の情報を返しています。
弊社のブログは記事数がまだ少ないので大丈夫かと思いますが、
大量のデータがあるサイトで実行すると時間がかかりますし
何度も実行するとサーバーに負荷をかけてしまいますので、そのあたりは気を付けて下さい。
その点を配慮して、
という内容にしています。
数字を変えればもっとたくさんのページの読み込みが可能ですし、速度も変えられますよ。
以下サンプルコードです。
import time import sys #システムのライブラリをインポート import requests #HTMLを取得する from bs4 import BeautifulSoup #モジュール名bs4 よりbeautifulsoupをインポート url = 'http://2960.jp/blog/' for n in range(3): res = requests.get(url) soup = BeautifulSoup(res.content,'html.parser') next_page = soup.find('span',class_ = "next") next_page = next_page.find('a',text = "次の10件へ >") records = soup.select('h4') for record in records: print(record.get_text()) url = next_page.get('href') if not next_page: break time.sleep(1)« 前の記事 次の記事 »
Leave a Comment