Python
 Computer >> コンピューター >  >> プログラミング >> Python

Scrapyを使用したPythonでの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サイトからデータを取得するための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)

Scrapyシェルの活用

リクエスト関数を使うことで、アンカータグ(<a>)内に含まれるすべてのデータを取得できます。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)
    # 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)

このコードでは、ページのタイトルを取得しつつ、すべてのリンクを抽出しています。さらに、リンク先に「tutorialspoint」というドメインが含まれている場合は、そのURLに対して再帰的にparseメソッドを呼び出すことで、サイト内を巡回(クローリング)できるようになっています。

まとめ

本チュートリアルでは、PythonのScrapyモジュールを使ってWebクローラーを実装する方法を学びました。Scrapyを活用すれば、APIが提供されていないサイトからも効率的かつ体系的にデータを収集できます。ぜひ実際にコードを書いて、Webスクレイピングの実践に挑戦してみてください。

  1. 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に標準で組み込ま

  2. 31 の最高の Web スクレイピング ツール

    コーディングに慣れていない人にとって、Web スクレイパーを作成するのは難しいかもしれません。幸いなことに、Web スクレイピング ソフトウェアは、プログラマーと非プログラマーの両方が利用できます。 Web スクレイピング ソフトウェアは、Web サイトから関連データを取得するために特別に設計されたソフトウェアです。これらのツールは、何らかの方法でインターネットからデータを取得したい人にとって有益です。この情報は、コンピューター上のローカル ファイルまたはデータベースに記録されます。 Web用のデータを自律的に収集する技術です。 31 の最高の無料 Web スクレイピング ツールのリストを紹介