Scrapyの知人
1.0なぜscrapyを学びます
まず、リクエスト+セレンは、爬虫類の需要の90%を解決しますが、scrapyができない方が良い爬虫類のニーズの99%を解決するために表示されます。
しかし、より速くより強力な爬虫類を作るために
2.0 scrapyとは何ですか
Scrapyアプリケーションフレームワークは、あなたがすぐにつかむことができ、我々は唯一の少量のコードを実装する必要が書かれた構造化データを抽出し、データをクロールするためのウェブサイトです
Scrapyはツイスト[「twistid]非同期ネットワークフレームワークを使用して、我々は、ダウンロード速度をスピードアップすることができます
3.0 scrapyプロセス:
- 蜘蛛(爬虫類):それは再びスケジューラ(スケジューラ)を入力し、データ分析、データ収集項目の必須項目を抽出し、URLをフォローアップするためにエンジンの必要性に提出する、そこからすべての応答を処理します
処理エンジン、データ抽出、抽出のURL、およびエンジンへの対応により送信されました。[手書き]ニーズ
- エンジン(エンジン):ようにスパイダー、ItemPipeline、ダウンローダー、真ん中スケジューラ通信、信号、データ転送とを担当します。
司令官:異なるモジュールでのデータ転送や信号の仕事を担当しています。手書き[しません]
- スケジューラ(スケジューラ):それはエンジンから送信された要求の要求を受け入れる責任であり、エンジンは時間を必要とするとき彼らは、チームの中に、特定の方法で配置された編成は、エンジンに戻りました。
キューストレージ要求は、要求エンジンを送りました。手書き[しません]
- ダウンローダー(ダウンローダー):すべての要求をダウンロードするための責任はScrapyエンジン(エンジン)が送信される要求し、取得した応答はScrapyエンジン(エンジン)、スパイダー処理されるエンジンを返さ
ダウンロードエンジンは、私は、要求を要求送信され、エンジンに戻りました。手書き[しません]
- ItemPipeline(パイプ):これは、取得したアイテム、および後処理(詳細な分析、濾過、ストレージなど)を代わりにスパイダーを取り扱います。
このようなストレージのニーズなどのエンジンからのデータを処理する、[手書き]
- ダウンローダミドルウェア(ダウンロードミドルウェア):カスタムコンポーネントがダウンロード機能を拡張することができるようあなたが考えることができます。
拡張機能をダウンロードし、このようなプロキシ設定など、カスタマイズすることができます。[手書き]一般ません
- スパイダーミドルウェア(クモミドルウェア):あなたの機能的コンポーネントは、カスタマイズ、エンジンの動作を拡張することができると理解することができ、中間体通信スパイダー(例えばクモの応答を入力として、要求およびクモのうち)
あなたは、フィルタの要求のリクエストや要望をカスタマイズすることができます。[手書き]一般ません
4.0どのように単純なアプリケーション
プロジェクトscrapyの作成4.0.1
scrapy startprojectのmySpider
4.0.2爬虫類を生成
itcast scrapyのgenspider " itcast.cn "
4.0.3抽出データ
XPathのか、CSSの抽出物を使用して完璧なクモ、
4.0.4データの保存
パイプラインは、保存されました
4.0.5スタート
scrapyクロールitcast
5.0簡単な例
クモ
インポートScrapyの クラスItcastSpider(scrapy.Spider): 名 = ' itcast ' #クローラー名 allowed_domains = [ ' itcast.cn ' ] #のクローラ範囲 start_urls = [ ' http://www.itcast.cn/channel/teacher.shtml ' ] #の所望の応答に対応するクローラ開始ページ、URLは、応答データを有する DEF:解析(セルフ、応答) #解析この方法はアドレスstrat_urlsに対応する応答である(応答) #解析関数名が、特定の変更することはできません #1 RET = response.xpath( "// divの[クラス@ = 'tea_con'] // H3 /テキスト()")。エキス() #セレクタオブジェクトは最初抽出する)(extract_first、()メソッドを抽出有する #1 印刷(RET) #にグループ化 li_list = response.xpath(" //のdiv [@クラス= 'tea_con'] //のLiを" ) のためのLi にli_list : 商品 = {} 商品[ " 名前" ] = li.xpath(" .// H3 /テキスト()"。).extract_first()ストリップ() #ストリップストリップスペースの 項目[ " タイトル" ] = li.xpath(" .// H4 /テキスト()" ).extract_first()。 ストリップ() 利回りアイテム #この場所は、処理するためのパイプラインに送られたアイテムで、収量は発電機で、メモリ使用量の削減 #を処理するためのパイプラインを開くべきSETINGながら #のタイプの利回りだけを要求、BaseItem、辞書やなしに、リストタイプ動作しません
パイプライン
クラスMyspiderPipeline(オブジェクト): DEF process_item(セルフ、アイテム、スパイダー): #1 process_item関数名は、それが固有で、変更することはできません #気にいら行うに 項目を[ 「こんにちは」 ] = [ 「世界」] #の印刷(項目) のリターン項目 #以前pipelinは戻りアイテムを持っている、またはnullである必要があります クラスMyspiderPipeline2(オブジェクト): DEF process_item(セルフ、アイテム、スパイダー): #1 process_itemは、この関数名を変更することはできません、これは特定のある #気にいらないの行うための 印刷を(項目) 戻り項目
設定
BOT_NAME = ' myspider ' SPIDER_MODULES = [ ' myspider.spiders ' ] NEWSPIDER_MODULE = ' myspider.spiders ' LOG_LEVEL = " WARNING " #五个等级、设置一下 #のクロール責任をユーザーエージェントに自分自身(およびWebサイト)を特定することによって #USER_AGENT = 'myspider(+のhttp://www.yourdomain.com)' #robots.txtの規則に従う ROBOTSTXT_OBEY = 真 #Scrapyによって行わ最大同時要求を設定します(デフォルト:16) #CONCURRENT_REQUESTS = 32 #同じWebサイトの要求のための遅延を設定します(デフォルト:0) #を参照してくださいhttps://doc.scrapy.org/en/latest/topics/settings.html#download-delay #を参照してください。また、オートスロットルの設定やドキュメント #DOWNLOAD_DELAY = 3 #:ダウンロードの遅延設定は一つだけの尊重します 。#CONCURRENT_REQUESTS_PER_DOMAIN = 16 #CONCURRENT_REQUESTS_PER_IP = 16枚の #(デフォルトで有効)を無効にクッキーを #COOKIES_ENABLED = Falseの #を無効のTelnetコンソール(デフォルトで有効) #TELNETCONSOLE_ENABLED = Falseの #オーバーライドデフォルトの要求ヘッダ: #DEFAULT_REQUEST_HEADERS = { # '受け入れる': 'text / htmlの、アプリケーション/ XHTML + xmlの、アプリケーション/ XML、Q = 0.9、* / *; Q = 0.8' # '言語受け入れ': 'EN'を、 #} #有効または無効にスパイダーミドルウェアの #はhttps://doc.scrapy.org/en/latest/topics/spider-middleware.html見る #SPIDER_MIDDLEWARES = { # 'myspider.middlewares.MyspiderSpiderMiddleware':543、 #} #を有効または無効にダウンローダミドルウェアの #を参照してくださいhttps://doc.scrapy.org/en/latest/topics/downloader-middleware.html #DOWNLOADER_MIDDLEWARES = { # 'myspider.middlewares.MyspiderDownloaderMiddleware':543、 #の拡張機能の有効化または無効化 #が参照https://doc.scrapy.org/en/latest/topics/extensions.html #をEXTENSIONS = { # 'scrapy.extensions.telnet.TelnetConsole' :なし、 #} #の設定項目パイプライン #はhttps://doc.scrapy.org/en/latest/topics/item-pipeline.html参照 ITEM_PIPELINES = { ' myspider.pipelines.MyspiderPipeline ' 300: 、 ' myspider.pipelines。 MyspiderPipeline2 ":302 、 #这个地方是路径加middleweares名 #300表示引擎的远近、数据越小、越新处理 } #オートスロットル拡張を有効にし、設定します(デフォルトでは無効) #を参照してくださいhttps://doc.scrapy.org/en/latest/topics/autothrottle.html #AUTOTHROTTLE_ENABLED =真 #初期ダウンロード遅延 #1 = 5 AUTOTHROTTLE_START_DELAY #が高レイテンシの場合に設定される最大ダウンロード遅延 #AUTOTHROTTLE_MAX_DELAY = 60 #Scrapyが並列に送信されるべき要求の平均数 #各リモートサーバ #1 AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0 #は有効受け取ったすべての応答のためのスロットリング統計を示します。 #1 AUTOTHROTTLE_DEBUGは= Falseの #(デフォルトでは無効)を有効にし、設定HTTPキャッシング #を参照してくださいhttps://doc.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings #HTTPCACHE_ENABLED = Trueの #HTTPCACHE_EXPIRATION_SECS = 0 #HTTPCACHE_DIR = 'httpcache' #HTTPCACHE_IGNORE_HTTP_CODES = [] #HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'