爬虫類--- 06. scrapy初期フレームワーク

I.基本概念

- scrapy:爬虫類のフレームワーク。
      非同期、高性能データ解析+クロール永続ストレージ操作を、
      それが様々な機能(高性能非同期ダウンロード、キュー、分散、解像度、持続性、等)を統合プロジェクトテンプレートは非常に汎用性を有します。
- フレームワークは:多くの機能を統合し、汎用性の高いプロジェクトテンプレートがある
- どのようなフレームワークを学ぶ: -フレームワークを学んで、特定の機能モジュールの使用を。

 

II。インストール環境

Windowsシステム:     

   。PIP3がインストール車輪 BのHTTPダウンロードツイスト:
// www.lfd.uci.edu/~gohlke/pythonlibs/#twisted 。Cをダウンロードディレクトリに、実行ツイスト・PIP3をインストール17.10 -cp35-cp35m- win_amd64.whl D. PIP3 pywin32インストール E. PIP3をインストールScrapy

  

  Linux系统:

 
 

      pip3 install scrapy

 

 

III。使用方法

    - ①プロジェクトの作成:scrapy startprojectのランボー
- ②CDのランボーを
- ③爬虫類のファイルを作成します。scrapy genspiderまずwww.xxx.com
- ④実行:第一scrapyクロールを

 

    scrapyクロール爬虫類の名前は:実行のこのタイプは、表示されたログ情報の形で行わ
    scrapyクロール爬虫類名 --nolog:ログ情報の形で実行の種類が表示されていない実行

 

 

アイテムの構造:

PROJECT_NAME / scrapy.cfg: PROJECT_NAME / __init__.py items.py pipelines.py のsettings.py スパイダース / __init__.py メインscrapy.cfg構成情報項目。(実クローラー関連する構成情報ファイルのsettings.py) items.pyは、以下のようなデータ構造化データのために保存されたテンプレート、設定:モデルのDjangoの パイプラインは、データ処理永続化 などのsettings.pyの設定ファイルは、:再帰しますダウンロード、同時遅延の数 のようなクモの爬虫類ディレクトリ:ファイルを作成するには、ルールを解析爬虫類を書きます

 

四つの基本的な構造:

 

# - * -コーディング:UTF- 8 - * - 
インポートscrapyの

クラスQiubaiSpider(scrapy.Spider): = Qiubai #アプリケーション名の
    彼らは、ドメイン名の非URLをクロールしていないされている場合#クローリングは、(ドメイン名を許可しますデータ)
    allowed_domains = [ ' https://www.qiushibaike.com/ ' ] 
    クローリング#のURL開始
    start_urls = [ ' https://www.qiushibaike.com/ ' ] 

     開始URLにアクセスするための#と取得結果を。コールバック関数は、関数の引数への応答が要求URLを送信した後に開始され、関数の戻り値に応じて得られたオブジェクトは、反復オブジェクトまたはNULLでなければなりません
     :DEF解析(自己、応答)
        を印刷(response.text)#文字列型に応じてコンテンツを取得し
        、対応するコンテンツのタイプを取得するためにプリント(response.body)バイト#

 

 爬虫類ファイル

 

 

 

 

 

 例:

#嗅事百科作者和内容

# - * -コーディング:UTF- 8 - * - インポートscrapyの クラスFirstSpider(scrapy.Spider): = ' ' #allowed_domains = [ ' www.xxx.com ' ] start_urls = [ ' https://www.qiushibaike.com/text/ ' ] DEF(自己、応答)解析: div_list = response.xpath(' //のdiv [@ ID = "コンテンツ左"] / DIV ' 用の DIV div_list : autor = div.xpath("./div [1] / [2] / H2 /テキスト()' ).extract_first() 含有量 = div.xpath(' ./a/div/span//text()' ).extract() プリント( autor、コンテンツ)

 

 V.永続ストレージ

- 永続的ストレージ:
     -端末の指示に基づき: - ScrapyクロールQiubai O filePath.csv
         - 便利:メリット
         - 欠点:強い制限(のみローカルファイルにデータを書き込むことができ、ファイル拡張子が特定の要件がある)
     - ベースのパイプライン:
         -永続ストレージ上のすべての操作は、ファイルのパイプラインパイプラインに書き込む必要があります

 

  1.命令は、端末に保存されています

これは、の形の[{}、{}]で構成されなければならない

ストレージを指定された出力フォーマットを行う:ファイルデータを格納するための異なる形式で記述されているクロール scrapyクロールクローラ名
- O xxx.json scrapyクロールクローラ名 - O XXX .xmlの scrapyクロール爬虫類名 -o xxx.csv

 

#示例:

# - * -コーディング:UTF- 8 - * - インポートscrapyの クラスFirstSpider(scrapy.Spider): = ' ' #allowed_domains = [ ' www.xxx.com ' ] start_urls = [ ' https://でwww.qiushibaike.com/text/ ' ] DEF(自己、応答)解析: all_data = [] div_list = response.xpath(' //のdiv [@ ID = "コンテンツ左"] / DIV ' 用の DIV div_list : autor = div.xpath(' ./div [1] / [2] / H2 /テキスト()' ).extract_first() 含有量 = div.xpath(' ./a/div/span//text()' ).extract() プリント(autor、コンテンツ) DIC = { ' 作成者' :autor、 ' コンテンツ' :コンテンツ、 ' --- '" の\ n " + " ----------- ----------------------------- " } all_data。追加(DIC) 返す すべてのデータ

 

 

 

 

   2.永続ストレージのパイプラインに基づいて、

 

 

#在爬虫文件中

# -*- coding: utf-8 -*- import scrapy from qiubaiPro.items import QiubaiproItem class QiubaiSpider(scrapy.Spider): name = 'qiubai' # allowed_domains = ['www.xxx.com'] start_urls = ['https://www.qiushibaike.com/text/'] def parse(self, response): div_list = response.xpath('//div[@id="content-left"]/div') all_data = [] for div in div_list: # author = div.xpath('./div[1]/a[2]/h2/text()')[0].extract() author = div.xpath('./div[1]/a[2]/h2/text()').extract_first() content = div.xpath('./a/div/span//text()').extract() content = ''.join(content) # print(content) #实例化一个item类型的对象 item = QiubaiproItem() #使用中括号的形式访问item对象中的属性 item['author'] = author item['content'] = content #将item提交给管道 yield item

 

 

#items.py文件中

import scrapy
class QiubaiproItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() #scrapy.Field()万能的数据类型 author = scrapy.Field() content = scrapy.Field()

 

 

#pipelines.py(管道文件)中


# -*- coding: utf-8 -*- # Define your item pipelines here # # Don't forget to add your pipeline to the ITEM_PIPELINES setting # See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html #一个类表示的是将解析/爬取到的数据存储到一个平台 import pymysql from redis import Redis

#存在本地文件
class QiubaiproPipeline(object): fp = None def open_spider(self,spider): print('开始爬虫......') self.fp = open('./qiubai.txt','w',encoding='utf-8') #可以将item类型的对象中存储的数据进行持久化存储 def process_item(self, item, spider): author = item['author'] print(author, type(author)) content = item['content'] self.fp.write(author+ ":"+content) return item #返回给了下一个即将被执行的管道类 def close_spider(self,spider): print('结束爬虫!!!') self.fp.close()
# 存在mysql数据库中
class MysqlPipeLine(object): conn = None cursor = None def open_spider(self,spider): self.conn = pymysql.Connect(host='127.0.0.1',port=3306,user='root',password='',db='qiubai',charset='utf8') print(self.conn) def process_item(self, item, spider): self.cursor = self.conn.cursor() try: self.cursor.execute('insert into qiubai values("%s","%s")'%(item['author'],item['content'])) self.conn.commit() except Exception as e: print(e) self.conn.rollback() return item def close_spider(self,spider): self.cursor.close() self.conn.close() #存在redis数据库 class RedisPipeLine(object): conn = None def open_spider(self,spider): self.conn = Redis(host='127.0.0.1',port=6379) print(self.conn) def process_item(self,item,spider): dic = { 'author':item['author'], 'content':item['content'] } self.conn.lpush('qiubai',dic)

 

setting配置文件中

 

 

おすすめ

転載: www.cnblogs.com/sc-1067178406/p/10956908.html