Scrapyは、複数のクモ、各クモ指定した項目、パイプラインを作成し、一つだけのアイテムを使用して作成。ちょうどあなたがクロール同時に、すべてのスタートを開始することができ、スタートアップスクリプトを書きます。
本稿では、コードはgithubのにアップロードされた、テキストでリンクしていません。
まず、複数のクモのscrapyプロジェクトを作成します
scrapy startprojectのmymultispider
CD mymultispider
scrapy genspider myspd1 sina.com.cn
scrapy genspider myspd2 sina.com.cn
scrapy genspider myspd3 sina.com.cn
第二に、操作の方法
観察、クモのそれぞれにおける印刷関連情報を容易にするために1
インポートscrapyの クラスMyspd1Spider(scrapy.Spider): 名 = ' myspd1 ' allowed_domains = [ ' sina.com.cn ' ] start_urls = [ ' http://sina.com.cn/ ' ]
DEF 構文解析(自己、応答): 印刷(' myspd1 ')
このようmyspd2など他のものは、myspd3は、印刷関連のコンテンツです。
最初の比較的単純な書か2.クモランつ以上の方法で、以下のように、プロジェクトディレクトリにcrawl.pyファイルを作成します
scrapy.crawler インポートCrawlerProcess から scrapy.utils.project インポートget_project_settingsが 処理 = CrawlerProcess(get_project_settings()) #myspd1是爬虫名 process.crawl(' myspd1 ' ) process.crawl(' myspd2 ' ) process.crawl(' myspd3 ' ) process.start()
観測便宜上、出力がログファイルに定義することができsettings.py
LOG_LEVEL = ' ERROR '
次のように右実行し、このファイルを出力することができます
前記操作の第二の方法は、公式githubの中に見出すことができるクロールソースコードを変更することである。https://github.com/scrapy/scrapy/blob/master/scrapy/commands/crawl.py
以下に、同じディレクトリスパイダーにディレクトリを作成するディレクトリのMycmd、このディレクトリでmycrawl.pyを作成し、クロール源、前記修飾された実行方法でコピー
DEF RUN(セルフ、引数、OPTS): #爬虫類の取得リスト spd_loader_list = self.crawler_process.spider_loader.list() #各爬虫類横断 のため SPNameの中 spd_loader_list または引数: self.crawler_process.crawl(SPName、 ** opts.spargs) 印刷(" 爬虫類の起動:" + SPName) self.crawler_process.start()
ファイルのディレクトリに__init__.py初期化ファイルを作成します。
次の機関カタログの完了後
クローラを起動するコマンドを使用します
scrapy mycrawl --nolog
次のように出力されます。
第三に、指定されたアイテム
図1は、これは比較的単純で、クモの導入部で、items.pyファイルに対応するクラスを作成します
items.py
import scrapy class MymultispiderItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() pass class Myspd1spiderItem(scrapy.Item): name = scrapy.Field() class Myspd2spiderItem(scrapy.Item): name = scrapy.Field() class Myspd3spiderItem(scrapy.Item): name = scrapy.Field()
spider内,例myspd1
# -*- coding: utf-8 -*- import scrapy from mymultispider.items import Myspd1spiderItem class Myspd1Spider(scrapy.Spider): name = 'myspd1' allowed_domains = ['sina.com.cn'] start_urls = ['http://sina.com.cn/'] def parse(self, response): print('myspd1') item = Myspd1spiderItem() item['name'] = 'myspd1的pipelines' yield item
四,指定pipelines
1,这个也有两种方法,方法一,定义多个pipeline类:
pipelines.py文件内:
class Myspd1spiderPipeline(object): def process_item(self,item,spider): print(item['name']) return item class Myspd2spiderPipeline(object): def process_item(self,item,spider): print(item['name']) return item class Myspd3spiderPipeline(object): def process_item(self,item,spider): print(item['name']) return item
1.1settings.py文件开启管道
ITEM_PIPELINES = { # 'mymultispider.pipelines.MymultispiderPipeline': 300, 'mymultispider.pipelines.Myspd1spiderPipeline': 300, 'mymultispider.pipelines.Myspd2spiderPipeline': 300, 'mymultispider.pipelines.Myspd3spiderPipeline': 300, }
1.2spider中设置管道,例myspd1
# -*- coding: utf-8 -*- import scrapy from mymultispider.items import Myspd1spiderItem class Myspd1Spider(scrapy.Spider): name = 'myspd1' allowed_domains = ['sina.com.cn'] start_urls = ['http://sina.com.cn/'] custom_settings = { 'ITEM_PIPELINES': {'mymultispider.pipelines.Myspd1spiderPipeline': 300}, } def parse(self, response): print('myspd1') item = Myspd1spiderItem() item['name'] = 'myspd1的pipelines' yield item
指定管道的代码
custom_settings = { 'ITEM_PIPELINES': {'mymultispider.pipelines.Myspd1spiderPipeline': 300}, }
1.3运行crawl文件,运行结果如下
2,方法二,在pipelines.py文件内判断是哪个爬虫的结果
2.1 pipelines.py文件内
class MymultispiderPipeline(object): def process_item(self, item, spider): if spider.name == 'myspd1': print('myspd1的pipelines') elif spider.name == 'myspd2': print('myspd2的pipelines') elif spider.name == 'myspd3': print('myspd3的pipelines') return item
2.2 settings.py文件内只开启MymultispiderPipeline这个管道文件
ITEM_PIPELINES = { 'mymultispider.pipelines.MymultispiderPipeline': 300, # 'mymultispider.pipelines.Myspd1spiderPipeline': 300, # 'mymultispider.pipelines.Myspd2spiderPipeline': 300, # 'mymultispider.pipelines.Myspd3spiderPipeline': 300, }
2.3spider中屏蔽掉指定pipelines的相关代码
# -*- coding: utf-8 -*- import scrapy from mymultispider.items import Myspd1spiderItem class Myspd1Spider(scrapy.Spider): name = 'myspd1' allowed_domains = ['sina.com.cn'] start_urls = ['http://sina.com.cn/'] # custom_settings = { # 'ITEM_PIPELINES': {'mymultispider.pipelines.Myspd1spiderPipeline': 300}, # } def parse(self, response): print('myspd1') item = Myspd1spiderItem() item['name'] = 'myspd1的pipelines' yield item
2.4 运行crawl.py文件,结果如下
代码git地址:https://github.com/terroristhouse/crawler
python系列教程:
链接:https://pan.baidu.com/s/10eUCb1tD9GPuua5h_ERjHA
提取码:h0td