PythonのScrapyフレームワークで学ぶWebスクレイピング実装入門
本記事では、Pythonで利用できるScrapyフレームワークを使ったWebスクレイピングの手法について解説します。
Webスクレイピングとは?
Webスクレイピングとは、クローラー(スパイダー)と呼ばれるプログラムを使って、Webサイトからデータを自動的に取得する技術のことです。APIを提供していないWebページからデータを抽出したい場合に特に役立ちます。Pythonでは、Beautiful Soup、Scrapy、lxmlなど、さまざまなライブラリやフレームワークを使ってWebスクレイピングを実現できます。
今回は、その中でも大規模なデータ収集に適した強力なフレームワークであるScrapyの使い方を見ていきましょう。
Scrapyのインストール
まずはScrapyをインストールします。ターミナルまたはコマンドプロンプトで以下のコマンドを実行してください。
>>> pip install scrapy
プロジェクトの作成
Scrapyは単なるライブラリではなくフレームワークであるため、最初に初期化コマンドでプロジェクトを作成する必要があります。
>>> scrapy startproject tutpts
次に、Webサイトからデータを取得するためのクローラー(スパイダー)を構築します。クローラー用には、tutptscraw.pyという名前のスクリプトファイルを別途作成します。この中でコンテンツ抽出用のクラスを宣言し、クローラーに名前を付けます。そして.requestsを使って、指定したURLからデータを取得します。
取得したデータは、ジェネレーター関数(yield)によって順次返却されます。
実装例:スパイダーの基本構造
import scrapy
class ExtractUrls(scrapy.Spider):
name = "fetch"
# ジェネレーター関数
def start_requests(self):
# 対象のURLを指定
urls = ['https://www.tutorialspoint.com/index.htm/']
for url in urls:
yield scrapy.Request(url = url, callback = self.parse)
このコードでは、リクエスト関数を使ってアンカータグ(<a>)内のすべてのデータを取得します。Scrapyはミニフレームワークとして動作するため、各機能はScrapyシェル上で確認・実行できます。
Scrapyシェルの起動とデータ抽出
Scrapyシェルを起動するには、以下のコマンドを実行します。
scrapy shell https://www.tutorialspoint.com/index.htm/
シェルが起動したら、セレクター(CSSセレクターまたはXPath)を使ってアンカータグからデータを抽出します。
response.css('a')
links = response.css('a').extract()
parseメソッドでページ内の全リンクを取得
Webページ上の利用可能なすべてのリンクを取得するには、parseメソッドを作成します。Scrapyは内部で既に訪問済みのURLを自動的にスキップする仕組みを持っているため、結果表示時のレンダリング時間を短縮できるのも大きな特徴です。
import scrapy
class ExtractUrls(scrapy.Spider):
name = "fetch"
# ジェネレーター関数
def start_requests(self):
# 対象のURLを指定
urls = ['https://www.tutorialspoint.com/index.htm/']
for url in urls:
yield scrapy.Request(url = url, callback = self.parse)
# パース関数
def parse(self, response):
title = response.css('title::text').extract_first()
# アンカータグを取得
links = response.css('a::attr(href)').extract()
for link in links:
yield
{
'title': title,
'links': link
}
if 'tutorialspoint' in link:
yield scrapy.Request(url = link, callback = self.parse)
このコードでは、まずページタイトルをresponse.css('title::text')で取得し、続いてa::attr(href)ですべてのリンクURLを抽出しています。さらに、取得したリンクの中に「tutorialspoint」というドメインが含まれている場合は、そのリンク先に対しても再度parseメソッドを呼び出すことで、サイト内を再帰的に巡回(クローリング)できます。
まとめ
本記事では、PythonのScrapyフレームワークを使ったWebクローラーの実装方法について学びました。Scrapyを活用すれば、APIを持たないWebサイトからも効率的かつ柔軟にデータを収集できます。まずは小さなスパイダーから始めて、実際にコードを書きながら挙動を確かめてみてください。
-
PythonでWebスクレイピング!主要ライブラリ6選の特徴と使い方を徹底解説
Webスクレイピングとは コンピュータサイエンスにおけるWebスクレイピング(Web Scraping)とは、Webサイトからデータを抽出する技術のことです。この手法を活用することで、Web上に散在する非構造化データを、分析や加工がしやすい構造化データへと変換できます。 Python 3でよく使われる代表的なスクレイピングツールは以下の6つです。 Urllib(urllib.request) Requests BeautifulSoup Lxml Selenium MechanicalSoup 1. Urllib(urllib.request) UrllibはPythonに標準で組み込ま
-
31 の最高の Web スクレイピング ツール
コーディングに慣れていない人にとって、Web スクレイパーを作成するのは難しいかもしれません。幸いなことに、Web スクレイピング ソフトウェアは、プログラマーと非プログラマーの両方が利用できます。 Web スクレイピング ソフトウェアは、Web サイトから関連データを取得するために特別に設計されたソフトウェアです。これらのツールは、何らかの方法でインターネットからデータを取得したい人にとって有益です。この情報は、コンピューター上のローカル ファイルまたはデータベースに記録されます。 Web用のデータを自律的に収集する技術です。 31 の最高の無料 Web スクレイピング ツールのリストを紹介