Python の Web クローラー フレームワーク - Scrapy クローラー フレームワークの使用


I.はじめに

  • 個人ホームページ: ζ Xiaocaiji
  • 皆さんこんにちは、私は Xiaocaiji です。Python の Web クローラー フレームワーク - Scrapy クローラー フレームワークの使用法を学びましょう
  • この記事がお役に立ちましたら、ぜひフォロー、いいね、ブックマークしてください (ワンクリックで 3 つのリンク)

2. Scrapy クローラー フレームワークを構築する

   Scrapy クローラー フレームワークは、特に Windows システムでは多くのライブラリに依存しているため、少なくとも依存する必要があるライブラリは Twisted、lxml、PyOpenSSL、および pywin32 です。Scrapy クローラー フレームワークを構築する具体的な手順は次のとおりです。

1. Twisted モジュールをインストールする

   (1)以下の図に示すように、https://pypi.org/project/Twisted/#files URL を開きます。

ここに画像の説明を挿入


   (2) 以下の図に示すように、Twisted モジュール ファイルをダウンロードします。

ここに画像の説明を挿入


   (3) 「Twisted-22.10.0-py3-none-any.whl」バイナリ ファイルがダウンロードされたら、管理者としてコマンド プロンプト ウィンドウを実行し、cd コマンドを使用して「Twisted-22.10.0-py3-none-any.whl」ファイルが配置されているパスを開き、最後にウィンドウに「pip install Twisted-22.10.0-py3-none-any.whl」と入力して Twist をインストールします。以下の図に示すように、モジュールが作成されます。

ここに画像の説明を挿入


2. Scrapy フレームワークをインストールする

   (1) 次の図に示すように、コマンド ライン ウィンドウを開き、「pip install Scrapy」コマンドを入力して Scrapy フレームワークをインストールします。

ここに画像の説明を挿入


   (2) インストール完了後、コマンドラインに「scrapy」と入力し、異常メッセージやエラーメッセージが表示されなければ、Scrapy フレームワークは正常にインストールされています。以下に示すように:

ここに画像の説明を挿入

注: Scrapy フレームワークのインストール中に、lxml モジュールと pyOpenSSL モジュールも Python 環境にインストールされます。


3. pywin32 モジュールをインストールする

  コマンド ウィンドウを開き、「pip install pywin32」と入力します。エラー メッセージが表示されなければ、インストールは成功しています。


3. Scrapyプロジェクトを作成する

  任意のパスにプロジェクト フォルダーを作成します。たとえば、次の図に示すように、「D:\python」フォルダーでコマンド ライン ウィンドウを実行し、「scrapy startprojectscrapyDemo」と入力して「scrapyDemo」という名前のプロジェクトを作成します。

ここに画像の説明を挿入


  開発者の効率を向上させるために、Xiaocaiji は PyCharm サードパーティ開発ツールを使用して、作成したばかりのscrapyDemo プロジェクトを開きます。プロジェクトを開くと、左側のプロジェクトのディレクトリ構造に次の図に示す内容が表示されます。

ここに画像の説明を挿入


4. クローラーを作成する

   クローラーを作成するときは、まずクローラー モジュール ファイルを作成する必要があります。このファイルは Spiders フォルダーに配置する必要があります。クローラー モジュールは、1 つまたは複数の Web サイトからデータをクロールするために使用されるクラスです。scrapy.Spider クラスを継承する必要があります。次に、Web ページをクロールするコードを HTML ファイルとしてプロジェクト フォルダーに保存するクローラーの例を示します。サンプル コードは次のとおりです。

import scrapy  # 导入框架


class QuotesSpider(scrapy.Spider):
    name = "quotes"  # 定义爬虫名称

    def start_requests(self):
        # 设置爬取目标的地址
        urls = [
            "http://quotes.toscrape.com/page/1/",
            "http://quotes.toscrape.com/page/2/",
        ]
        # 获取所有地址,有几个地址发送几次请求
        for url in urls:
            # 发送网络请求
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        # 获取网页
        page = response.url.split("/")[-2]

        # 根据页面数据设置文件名称
        filename = "quotes-%s.html" % page
        # 写入文件的模式打开文件,如果没有该文件将创建该文件
        with open(filename, "wb") as f:
            f.write(response.body)
        # 输出保存文件的名称
        self.log("Saved file %s" % filename)

   Scrapy によって作成されたクローラー プロジェクトを実行するときは、コマンド ウィンドウに「scrapy roll quotes」と入力する必要があります。「quotes」は定義したクローラー名です。Xiaocaiji は PyCharm サードパーティ開発ツールを使用しているため、下部の「ターミナル」ウィンドウでコマンド ラインを入力してクローラーを実行する必要があります。実行後、次の図に示す情報が表示されます。

ここに画像の説明を挿入


注: Scrapy は、コマンド ウィンドウに入力したコマンド「scrapy roll quotes」の使用に加えて、プログラム内でクローラーを開始できる API (CrawlerProcess クラス) も提供します。まず、CrawlerProcess の初期化時にプロジェクトの設定情報を渡し、次に、crawl() メソッドでクローラの名前を渡し、最後に start() メソッドでクローラを開始する必要があります。コードは以下のように表示されます:

# 导入CrawlerProcess类
from scrapy.crawler import CrawlerProcess
# 获取项目配置信息
from scrapy.utils.project import get_project_settings

# 程序入口

if __name__ == "__main__":
    # 创建CrawlerProcess类对象并传入项目设置信息参数
    process = CrawlerProcess(get_project_settings())
    # 设置需要启动的爬虫名称
    process.crawl("quotes")
    # 启动爬虫
    process.start()


5. データを取得する

   Scrapy クローラー フレームワークは、特定の CSS または XPath 式を通じて HTML ファイル内の特定の場所を選択し、対応するデータを抽出できます。CSS。HTML ページのレイアウト、フォント、色、背景、その他の効果を制御するために使用されます。XPath は、XML ドキュメント内の要素と属性に基づいて情報を検索するための言語です。

1.CSS抽出データ

  CSS を使用して HTML ファイルからデータを抽出する場合、HTML ファイルでタグ名を指定できます。たとえば、上記の例の Web ページのタイトル タグ コードを取得するには、次のコードを使用できます。

response.css("title").extract()

  得られた結果は図に示すとおりです。

ここに画像の説明を挿入

説明:返されるコンテンツは CSS 式に対応するノードのリストであるため、タグからデータを抽出するときに次のコードを使用できます。

response.css("title::text").extract_first()

  また

response.css("title")[0].extract()

2. データを抽出する XPath

  XPath式を使用してHTMLファイル内の特定のデータを抽出する場合、XPath式の構文に従って指定されたデータの情報を取得する必要がありますが、例えばtitleタグ内の情報を取得する場合は以下のコードが使用できます。

response.xpath("//title/text()").extract_first()

  上記の例で XPath 式を使用して複数の情報を取得する例を示します。サンプルコードは次のとおりです。

    def parse(self, response):
        # 获取信息
        for quote in response.xpath(".//*[@class='quote']"):
            # 获取名人名言文字信息
            text = quote.xpath(".//*[@class='text']/text()").extract_first()
            # 获取作者
            author = quote.xpath(".//*[@class='author']/text()").extract_first()
            # 获取标签
            tags = quote.xpath(".//*[@class='tag']/text()").extract()
            # 以字典的形式输出信息
            print(dict(text=text, author=author, tags=tags))

3. ページをめくってデータを抽出します

  上記の例ではWebページ内のデータを取得していますが、Webページ全体の情報を取得したい場合はページめくり機能を使用する必要があります。たとえば、上記の例でサイト全体の作成者名を取得するには、次のコードを使用できます。

# 响应信息
    def parse(self, response):
        # div.quote
        # 获取所有信息
        for quote in response.xpath(".//*[@class='quote']"):
            # 获取作者
            author = quote.xpath(".//*[@class='author']/text()").extract_first()
            print(author)  # 输出作者名称

        # 实现翻页
        for href in response.css("li.next a::attr(href)"):
            yield response.follow(href, self.parse)

4. アイテムの作成

  Web ページ データをクロールするプロセスでは、構造化データが非構造化データ ソースから抽出されます。例えば、QuotesSpiderクラスのparse()メソッドでは、テキスト、作成者、タグの情報を取得できますが、これらのデータを構造化データにパッケージ化する必要がある場合には、scrapyが提供するItemクラスで対応する必要があります。Item オブジェクトは、クロールされたデータ情報を保存するために使用される単純なコンテナであり、辞書のような API と、利用可能なフィールドを宣言するための便利な構文を提供します。項目は、単純なクラス定義構文と Field オブジェクトを使用して宣言されます。scrapyDemoプロジェクトを作成すると、scrapy.Itemを継承する必要があるデータ情報を格納するためのItemクラスを定義するために、プロジェクトのディレクトリ構造にitems.pyファイルが自動的に作成されます。サンプルコードは次のとおりです。

import scrapy


class ScrapydemoItem(scrapy.Item):
    # define the fields for your item here like:
    # 定义获取名人名言文字信息
    text = scrapy.Field()
    # 定义获取的作者
    author = scrapy.Field()
    # 定义获取的标签
    tags = scrapy.Field()
    
    pass

  アイテムの作成後、作成したクローラコードに戻り、parse()メソッドでItemオブジェクトを作成し、アイテム情報を出力します。

    def parse(self, response):
        # 获取信息
        for quote in response.xpath(".//*[@class='quote']"):
            # 获取名人名言文字信息
            text = quote.xpath(".//*[@class='text']/text()").extract_first()
            # 获取作者
            author = quote.xpath(".//*[@class='author']/text()").extract_first()
            # 获取标签
            tags = quote.xpath(".//*[@class='tag']/text()").extract()
            # 以字典的形式输出信息
            item = ScrapydemoItem(text=text, author=author, tags=tags)
            yield item  # 输出信息

注: Scrapy クローラー フレームワークの内容が大きいため、ここではクローラー フレームワークのインストール、作成、およびデータ抽出について簡単に説明します。詳細なチュートリアルについては、ログイン ( https://docs.scrapy.org/en/latest/ ) の Scrapy 公式ドキュメントで問い合わせください


Python の Web クローラー フレームワーク - Scrapy クローラー フレームワークの使い方の紹介はこれで終わりです。読んでいただきありがとうございます。記事が役に立った場合は、注目、いいね、ブックマーク (ワンクリック 3 つのリンク)  をお願いします


おすすめ

転載: blog.csdn.net/weixin_45191386/article/details/131620901
おすすめ