requestsとBeautifulSoup4でシンプルなスクレイピング

はてなブックマークのホットエントリーから記事URL,タイトルを取得する例。

import requests
from bs4 import BeautifulSoup

res = requests.get('http://b.hatena.ne.jp/hotentry')
soup = BeautifulSoup(res.content, 'html.parser')

for a in soup.select('a.entry-link'):
    print(a['href'], a.text)

BeautifuSoupはインスタンス生成時にParserを指定できる。上記の例はhtml.parserを指定してあり、これはPython標準ライブラリで提供されるため、手軽に利用できるが速度的には遅い。高速なParserとしてはlxmlなどを別途インストールして指定することができる。

soup.selectではCSSセレクタを使用して走査している。

Scrapyとの比較

Scrapyでの例と比べると、単純な処理であればrequestsとBeatifulSoup4で実装したほうが簡単に書ける。

Scrapyはクローリングやスクレイピングのフレームワークで、多数のページを連鎖的にクローリングする手法などが組み込まれていて、複雑なスクレイピングが簡単に実装できる。

requestsとBeatifulSoup4で作成する際には、フレームワークの決まりごとがないぶんシンプルに記述できるが、上記のような多ページを取得することなどをやろうとすると複雑になってくる。

スクレイピングの注意事項

スクレイピングはブラウザと同じようにHTTPリクエストをサーバーに送り、データを取得するプログラムだが、プログラムの記述方法次第では、短時間に大量のリクエストをサーバーに送りつけ攻撃のようになってしまう事がある。

スクレイピングを実装する作法としては、繰り返しリクエストを送る間隔にsleep処理を入れて(最低でも1秒以上)短時間に大量のリクエストを送らないように注意する必要がある。

関連記事:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)