Pythonクローラー--- Scrapyフレームワークの予備調査と実際の戦闘

Scrapyフレームワークのインストール

動作環境紹介

オペレーティングシステム:Ubuntu19.10
Pythonバージョン
:Python3.7.4コンパイラ:pycharmコミュニティバージョン

スクレイピーフレームワークのインストール(Linuxシステムの下)

スクレイピーフレームワークのインストールで最も面倒な部分は、多数の依存パッケージをインストールすることです。依存パッケージがない場合、スクレイピーフレームワークのインストールはエラーを報告します。
ただし、lxmlモジュールはanaconda環境に含まれるため、いくつかの手順を省略できます。
ターミナルでコマンドを入力して、依存パッケージをインストールします

sudo apt-get install python-dev
sudo apt-get install libevent-dev

yを入力して、プロンプトに従ってインストールを確認し、インストールが完了するまでしばらく待ちます。
必要な依存パッケージをインストールしたら、pipを使用して直接、スクレイピーフレームワークをインストールできます。

pip install scrapy

端末にコマンドを入力した後、ネットワーク応答タイムアウトなどのエラーが発生する場合がある

数回試した後、これはソフトウェアソースの問題で、ダウンロードが遅すぎると思います。インストールするために、清華ミラーソースを置き換えることをお勧めします

pip install scrapy -i https://pypi.tuna.tsinghua.edu.cn/simple

コマンドの最後に-iを追加して、指定したイメージソースを一時的に使用して、スクレイピーフレームワークをインストールします。
他の問題の影響を除外した後、インストール速度がまだ理想的でない場合は、より多くのソースをインストールしてみてください。

阿里云 http://mirrors.aliyun.com/pypi/simple/ 
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/ 
豆瓣(douban) http://pypi.douban.com/simple/ 
清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/ 
中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/

ソースを変更した後、ダウンロード速度が大幅に変化したことがわかります。数秒待って、インストールが成功したことを示します

インストールが成功したかどうかを確認します

ターミナルを開き、コマンドを入力してスクラップバージョンを表示します

scrapy --version

以下に示すようなバージョン情報を参照してください。

次に、コマンドを入力します

scrapy bench

このコマンドは、scrapyを呼び出して空のURLのコンテンツをクロールします。コマンドを入力すると、scrapyが実行されて空のURLのコンテンツがクロールされます。フレームワークは正常にインストールされています。

スクレイピーフレームワーククロールの原則

Scrapyフレームワークの主な構造は、5つの部分に分かれています。

Scrapy Engine(エンジン):Spider、ItemPipeline、Downloader、Scheduler間の通信、信号、データ転送などを担当します。
スケジューラー(スケジューラー):エンジンから送信されたリクエストリクエストを受け入れ、特定の方法に従って並べ替えて並べ替え、キューに入り、エンジンが必要なときにエンジンに戻ります。
ダウンローダー(ダウンローダー):Scrapyエンジン(エンジン)によって送信されたすべてのリクエストをダウンロードし、それが取得した応答をSpider to Spiderによって処理されるScrapyエンジン(エンジン)に返します。
スパイダー:すべての応答の処理、データの分析と抽出、アイテムフィールドで必要なデータの取得、エンジンがたどる必要のあるURLの送信、およびスケジューラーの再入力を行います。
アイテムパイプライン(パイプライン):Spiderで取得したアイテムを処理し、後処理(詳細な分析、フィルタリング、保存など)を実行します。

また、ダウンロード機能をカスタマイズできる2つのミドルウェアもあります。

ダウンローダーミドルウェア(ダウンロードミドルウェア):拡張ダウンロード機能をカスタマイズできるコンポーネント。
Spider Middlewares(Spider Middleware):エンジンとSpider Middle Communicationの拡張と操作をカスタマイズできる機能コンポーネント。

Scrapyフレームワークのしくみ

上図からわかるように、エンジンはフレームワークの脳に相当し、他のパーツの動作を調整します。

まず、クローラーファイルがURLリクエストをエンジンに送信し、次にエンジンを介してディスパッチャにURLを送信します。ディスパッチャは送信されたURLを内部関数でキューに入れ、キューに入れられたURLをエンジンに送り返します。エンジンは、返されたキューを受信すると、ダウンローダーに要求を送信し、ダウンローダーは外部WebページからWebページのソースコードを取得し、取得した応答データをエンジンに送信します。エンジンがダウンローダーによって返されたWebページのソースコードを受信すると、データはクローラーファイルに返されます。クローラーファイルは、htmlデータの抽出を担当します。データの抽出が完了すると、データがエンジンに送信されます。エンジンは、クローラーファイルによって送信されたコンテンツを検出します。送信されたコンテンツがデータであると判断された場合、エンジンはデータをファイルを具体的に保存するパイプラインデータに送信します。パイプラインファイルは、送信されたデータを受信した後、選択的に次の場所に保存できます。データベースまたはファイル。

この時点で、完全なクローラープロジェクト操作が完了します。

スクレイピーフレームワークの例

Scrapyを使用してAli Literatureをクロールする

スクレイピーフレームワークを使用したクロールの一般的な手順

1.クローラープロジェクトの
作成2.クローラーファイルの作成
3.クローラーファイルの
書き込み4.アイテムの
書き込み5.パイプラインの書き込み
6.設定の構成
7.スクレイピーフレームワークの実行

注:上記の手順はスクレイピーを使用する一般的な手順ですが、実際の操作では、クロールの難易度に応じてこれらの手順を調整できます。

1.クローラープロジェクトを作成する

まず、プロジェクトのコンテンツを保存するフォルダーを見つけ
、ターミナルを開いて次のディレクトリに入力します。

scrapy startproject [项目名称]

正常に作成されました

現時点では、プロジェクトにちなんで名付けられた追加のフォルダを見つけることができます

フォルダに移動して、すでにフレームテンプレートファイルが中にあることを確認します

INITの.py //初期ファイル
items.pyはあなたが登るしたい情報目標を定義//、
pipelines.py //後クライミングプロセス
middlewares.py //真ん中のボタン
settings.pyのセットアップ情報ファイルを//

2.クローラーファイルを作成する

scrapy genspider [爬虫名] [想要爬取网址的域名]

注:クローラー名はプロジェクト名と同じであってはなりません。そうでない場合、作成に失敗します。

3.ファイルを分析し、クローラーファイルを書き込む

前の手順でクローラーファイルを作成した後、プロジェクト名ディレクトリの下に追加のpyファイルが見つかります

aliwx.pyファイルを開き、Webページの分析を開始して、クロールする情報を抽出します。AliLiterature
の公式Webサイトのホームページを開き、最初にクロールするコンテンツを最新の更新された本のタイトルと章に設定し、xpath構文を使用して抽出します

プロジェクトフォルダーの下のスパイダーフォルダーを開き、先ほど作成したクローラーファイルを開きます。
開くと、基本的なクローラーフレームワークが表示されます。実際のニーズに応じて、このフレームワークのコンテンツを変更する必要があります。

上の赤​​い矢印のところが主に修正した箇所です。
まず、最初に指摘したアドレスをクロールしたいアドレスに置き換えます。これは、Ali Literatureの公式ウェブサイト「https://www.aliwx.com.cn/のホームページです
2番目は、コンテンツをクロールするためのカスタムアイテムを設定することです。

import scrapy

class AliwxSpider(scrapy.Spider):
    name = 'aliwx'
    allowed_domains = ['aliwx.com.cn']
    start_urls = ['https://www.aliwx.com.cn/']

    def parse(self, response):
        #选择所有a标签下的内容
        selectors = response.xpath("//ul[@class='list']/li[@class='tr']/a")  
        # 循环遍历每一个a标签,使书名和最新章节可以一对一匹配
        for selector in selectors:
            #提取a标签下的书名 . 表示在当前标签下继续选择
            book_name = selector.xpath("./span[2]/text()").get()  
            #提取a标签下的最新章节名
            book_new = selector.xpath("./span[3]/text()").get() 

            #打印书名和章节名
            print(book_name,book_new)

4.設定を行う

設定ファイルを開き、ファイル内のコードを見つけます

この行の意味は、クローラープロトコルに従うかどうかを尋ねることです。一般的に、プロトコルは、ウェブサイトが抽出できるコンテンツのみを抽出できるように規制しているため、ここではTrueをFalseに置き換える必要があります。そうしないと、必要なものを抽出できない場合があります。の内容

5.スクレイピーフレームワークを実行する

ターミナルを開き、ディレクトリをプロジェクトフォルダーに切り替え、コマンドラインを入力してプロジェクトを実行します

scrapy crawl [爬虫名]

プロジェクトの実行が完了するのを待つと、クロールされたコンテンツが表示されます。

6.クロールされたコンテンツをファイルに保存します

コンテンツをファイルに保存する場合は、戻り値を設定して
、print(book_name、book_new)ステートメントを格納および置換する必要があります。

items = {
                'name': book_name,
                'new': book_new,
            }

            yield items

次にターミナルを開き、実行を入力してコマンドを保存します。

scrapy crawl aliwx -o book.csv

プログラムの実行が完了するのを待つと、book.csvファイルがプロジェクトディレクトリに表示されます。開いているのは保存したファイルです。

これまでのところ、最も基本的なクローラープロジェクトの1つが完了しています。何か問題がある場合は、私を批判して修正してください!

おすすめ

転載: www.cnblogs.com/cherish-hao/p/12704388.html