Scrapy入門———Scrapy 1.6公式教程学習ノート

3707 ワード

Scrapyがインストールされていれば、次のチュートリアルを開始できます.もしなかったら、私のブログ「Scrapyのインストール」を見てインストールしてから、戻って見てもいいですよ.
次に、登ります quotes.toscrape.comの有名人の名言は、このチュートリアルの素材として使われています.
チュートリアルには、次の5つのステップがあります.
  • 新しいScrapyプロジェクト
  • を作成
  • はspiderを書いてウェブページに登ってデータ
  • を抽出します
  • コマンドラインを使用して這い出すデータ
  • を出力する.
  • リンクに従って再帰的に這い出す(各リンクを這い出す)
  • .
  • spiderパラメータ
  • を使用
    Scrapyプロジェクトの作成
    Scrapyの使用を開始する前に、新しいScrapyプロジェクトを作成する必要があります.ディレクトリに入り、次のコマンドを入力して、Scrapyプロジェクトを新規作成します.
    scrapy startproject tutorial
    では、次のようなtutorialディレクトリが作成されます.
     
       
    tutorial/
        scrapy.cfg            # deploy configuration file
    
        tutorial/             # project's Python module, you'll import your code from here
            __init__.py
    
            items.py          # project items definition file
    
            middlewares.py    # project middlewares file
    
            pipelines.py      # project pipelines file
    
            settings.py       # project settings file
    
            spiders/          # a directory where you'll later put your spiders
                __init__.py

    最初のSpider
    Spidersは、Webサイトから情報を抽出するために定義するクラスです.
    Spidersはscrapy.Spiderのサブクラスと初期化要求を定義し、ページ内でリンクを追跡する方法、ダウンロードしたページ内容を解析してデータを抽出する方法を選択する必要があります.
    次のコードは私たちの初めてのSpiderコードです.保存ファイル名quotes_spider.pyは、tutorial/spidersディレクトリの下に新しいSpidersプロジェクトに保存されます.
    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)
    では、Spiderのサブクラスscrapy.Spiderがいくつかのプロパティとメソッドを定義していることがわかります.
  • name:Spiderの識別子.プロジェクト内でユニークでなければなりません.異なるSpiderに同じ名前を設定することはできません.
  • start_requests():反復可能なリクエストを返す必要があります(リクエストリストを返すか、ジェネレータ関数を作成できます).これにより、爬虫類が爬虫類を開始します.後続のリクエストは、これらの初期リクエストから順次生成されます.
  • parse():各リクエストがダウンロードした応答を処理するためにメソッドが呼び出されます.応答パラメータは、ページの内容を含むTextResponseインスタンスであり、それを処理するためのさらなる助けがあります.parse()メソッドは、通常、応答を解析し、クリップデータをdictsとして抽出し、それらからの新しいリクエスト(リクエスト)を追跡および作成するために新しいurlを探します.

  • spiderの実行方法
    spiderを作業するには、プロジェクトのトップディレクトリに戻り、次のように実行します.
    scrapy crawl quotes
    このコマンドは、追加したばかりのnameをquotesとする爬虫類を実行するために使用され、いくつかのリクエストが送信されます.これと同様の出力が得られます.
    ... (omitted for brevity)
    2016-12-16 21:24:05 [scrapy.core.engine] INFO: Spider opened
    2016-12-16 21:24:05 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
    2016-12-16 21:24:05 [scrapy.extensions.telnet] DEBUG: Telnet console listening on 127.0.0.1:6023
    2016-12-16 21:24:05 [scrapy.core.engine] DEBUG: Crawled (404)  (referer: None)
    2016-12-16 21:24:05 [scrapy.core.engine] DEBUG: Crawled (200)  (referer: None)
    2016-12-16 21:24:05 [scrapy.core.engine] DEBUG: Crawled (200)  (referer: None)
    2016-12-16 21:24:05 [quotes] DEBUG: Saved file quotes-1.html
    2016-12-16 21:24:05 [quotes] DEBUG: Saved file quotes-2.html
    2016-12-16 21:24:05 [scrapy.core.engine] INFO: Closing spider (finished)
    ...
    現在のディレクトリのファイルを確認します.parseメソッドによって生成された2つの新しいファイル:quotes-1.htmlとquotes-2.htmlが作成されていることに注意してください.
    ヒント:なぜHTMLを解析していないのか知りたい場合は、少々お待ちください.すぐにお話しします.
    続きを待つ
    Scrapy 1.5公式文書を参照:https://docs.scrapy.org/en/latest/intro/tutorial.html#