scrapy 1.1新米ガイド(python 3)

5907 ワード

初めてscrapyに接触して、オフィシャル[tutorial]を記録します.http://doc.scrapy.org/en/1.1/intro/tutorial.html)公式ガイドブックでは、はい上がったサイトは、「tes.tootcrape.com」です.
ガイドは終了します.
  • 新規プロジェクト
  • 登りたい内容を定義する
  • 爬虫類を書いてウェブサイトを取りに行きます.
  • コマンドラインを使って、這って取った内容を導出する
  • .
    配置
    私は自分のvps(centos 7)に展開しています.Virtualnvを使って、pythonのバージョンは3.5.です.コンパイル環境に注意して必ず装填してください.centos 7についてpython 3.5をインストールして、virtualnvと必要なコンパイル環境を有効にします.ここを見てください.
    pip install scrapy
    
    インストールが完了しました
    のpackage libffiエラーが発生したら
    yum install libffi-devel
    
    scrapy初心者ガイド
    新しいプロジェクトを作成します.
    ディレクトリの下で''scrapy startproject tutoraial''を実行します.現在のディレクトリの下でtutorialというフォルダを作成します.このフォルダ構造は以下の通りです.
    tutorial/
        scrapy.cfg            # scrapy       
    
        tutorial/             #    python ,          
            __init__.py
    
            items.py          #        (        )
    
            pipelines.py      #        (         )
    
            settings.py       #        
    
            spiders/          #        
                __init__.py
    
    ターゲットファイルを定義する(Items)
    Itemsは、コンテンツをロードするためのコンテナです.Pythonの辞書と似ています.また、Item Loadersの使用に合わせて追加の機能を提供します.Itemはscrapy.Itemクラスを作成するだけで、scrapy.Fieldオブジェクトとして設定します.ORMを使うのに似ています.(ORMが大丈夫かどうかは分かりませんが、今は使えません.)
    私達はquot.tootcrape.comの本文と作者を捕まえてtutorial/items.pyファイルを編集して、クラスを追加します.
    import scrapy
     
    class QuoteItem(scrapy.Item):
        text = scrapy.Field()
        author = scrapy.Field()
    
    爬虫類ファイル(spidrs)
    ウェブページのコードを取得します
    spidersは私達が定義したもので、必要な内容を登るための書類で、新しい爬虫類ファイルを作成します.scrapy.Spiderを継承して、以下の属性を定義します.
  • name爬虫類の名称は、同じ項目に重複した名称のspiderがあってはいけません.
  • start_url開始urlリストは、各urlがResonseオブジェクト
  • に戻ります.
  • parse()呼び出し時に各URLから転送されたResponseオブジェクトに着信し、キャプチャされたデータ(解析item)を解析してマッチングし、より多くのURLを追跡する.新しいチュートリアル/spiders/quot tespider.pyファイル
  • import scrapy
    class QuotesSpider(scrapy.Spider):
        name = "quotes"
        start_urls = [
            'http://quotes.toscrape.com/page/1/',
            'http://quotes.toscrape.com/page/2/',
        ]
        #                 ,      
        def parse(self, response):
            filename = 'quotes-' + response.url.split("/")[-2] + '.html'
            with open(filename, 'wb') as f:
                f.write(response.body)
    
    実行後(この時はクラスだけを定義して、プロジェクトのルートディレクトリでscrapy crawl quot)を実行したいです.Scrpyは各urlのためにscrapy.Requestオブジェクトを作成して、各requestsを実行します.戻りのレスポンスオブジェクトをパラメータとしてパスする方法です.
    必要な内容を分析して取得するSrapy Selectors
    ページコードを現地にダウンロードした後、データを分析し、Scrpyを抽出し、Selector類を提供してデータを取得する必要があります.詳細は紹介されたSelectorsによってサポートされます.
  • xpath():selectorリストを返し、各項目は一つのxpathパラメータ表現の選択を表すノード
  • を返します.
  • css():selectorリストを返し、各項は一つのcssパラメータ表現の選択を表すノード
  • を返します.
  • extract():正規表現を用いて取り込まれた内容を返す文字列リスト
  • re():正規表現を用いて取り込まれた内容を返す文字列リスト
  • XPTath詳細はXXPS教程をご参照ください.
    チュートリアルを修正します.spider.pyファイル
    import scrapy
     
    class QuotesSpider(scrapy.Spider):
        name = "quotes"
        start_urls = [
            'http://quotes.toscrape.com/page/1/',
            'http://quotes.toscrape.com/page/2/',
        ]
     
        def parse(self, response):
            for quote in response.xpath('//div[@class="quote"]'):
                text = quote.xpath('span[@class="text"]/text()').extract_first()   
                author = quote.xpath('span/small/text()').extract_first()   
                print(u'{}: {}'.format(author, text))
    
    parse():classごとにquotのdivを取って、divの中でtextとauthorの本文を遍歴します.extract_.first():selectorリストの第一項を返します.
    定義されたターゲットファイル(Item)を使用します.
    import scrapy
    from tutorial.items import QuoteItem
     
     
    class QuotesSpider(scrapy.Spider):
        name = "quotes"
        start_urls = [
            'http://quotes.toscrape.com/page/1/',
            'http://quotes.toscrape.com/page/2/',
        ]
     
        def parse(self, response):
            for quote in response.xpath('//div[@class="quote"]'):
                item = QuoteItem()
                item['text'] = quote.xpath('span[@class="text"]/text()').extract_first()
                item['author'] = quote.xpath('span/small/text()').extract_first()
                yield item
     
    
    yieldに関しては、ここを見てください.
    後続の接続をよじ登ります.
    前のコードは私達のストールを取るだけです.urlsで定義されている二つのページで、爬虫類はstart_からurlの中で登って取った内容の中で後続のurlリンクを探し当てます.
    import scrapy
    from tutorial.items import QuoteItem
     
    class QuotesSpider(scrapy.Spider):
        name = "quotes"
        start_urls = [
            'http://quotes.toscrape.com/page/1/',
        ]
        def parse(self, response):
            #       
            for quote in response.xpath('//div[@class="quote"]'):
                item = QuoteItem()
                item['text'] = quote.xpath('span[@class="text"]/text()').extract_first()
                item['author'] = quote.xpath('span/small/text()').extract_first()
                yield item
            next_page = response.xpath('//li[@class="next"]/a/@href').extract_first()
            #            ,    request      request callback parse()
            if next_page:
                next_page = response.urljoin(next_page)
                yield scrapy.Request(next_page, callback=self.parse)
    
    這い上がった情報を記憶する
    Feed exportsを使う
    取得した情報を追加処理(例えばデータベースに保存)する必要がない場合、scrapy命令によりJsonなどのフォーマットのファイルを直接出力することができます.詳細はFeed exportsなどを参照して、jsonファイルとして出力されます.
    #       items.json  
    scrapy crawl quotes -o items.json
    
    パイプラインpipelineを使う
    新規プロジェクトを作成すると、パイプラインファイルのtutrial/pipeline.pyが自動的に生成されます.
    締め括りをつける
    っていうか、マニュアルはここで終わってしまいます.コマンドラインで実行することだけを述べました.scrapy.cfgファイルは?settings.pyファイルは?
    はい、説明しただけです.
  • 新規プロジェクト
  • 登りたい内容を定義する
  • 爬虫類を書いてウェブサイトを取りに行きます.
  • コマンドラインを使って、這って取った内容を導出する
  • .
    もっと多くの内容は後のドキュメントにあります.今日は先にここに記録してください.明日は引き続きscrapyを見ます.
    本論文のリンクhttp://ludaming.com/posts/spider/scrapy-tutorial.html 私のブログ:ludaming.com