単純な分散爬虫類プロジェクト爬虫類scrapyになるためにプロジェクトを変更する方法1、
公式文書:https://scrapy-redis.readthedocs.io/en/stable/
その上に修正scrapyプロジェクトと2つだけのファイル
爬虫類コンポーネントファイル:
#- * -コーディング:UTF-8 - * - 輸入scrapy から scrapy_redis.spidersのインポートRedisSpider #クラス定義の爬虫類を継承すると、爬虫類、以下もはやscrapy.spidersではありませんので、 #が、爬虫類の次scrapy-redis.spiders クラスDistributedSpiderSpider(RedisSpider): 名前 = ' distributed_spider ' allowed_domains = [ ' wh.lianjia.com ' ] #将start_urls替换为redis_key #start_urls = [ 'https://wh.lianjia.com/ershoufang/'] redis_key = " myspider:start_urls " デフ解析(自己、応答): プリント(response.meta) アイテム = dictの() 項目[ " 州" ] = " 湖北" 項目[ " 都市" ] = " 武汉" ブロック = response.xpath(" // divの[@クラス= '位置'] / DL [2] / DD / DIV [1] / DIV / A 」) のためにブロック内のブロック: タイトル = blocks.xpath(" ./@title " )に.get() URL = " https://wh.lianjia.com " + block.xpath(" ./@href " )に.get() プリント(タイトル、URL、" ===================================== " ) 収率 scrapy.Request(URL = URL、コールバック= self.parse_block、メタ= { " 項目" :アイテム}) デフparse_block(自己、応答): プリント(response.meta) URL = response.url + " PG%dco32 / " インデックス = 1 一方指数<100 : NEW_URL = URL% 、インデックス プリント(NEW_URL) 収率 scrapy.Request(URL = NEW_URL、コールバック= self.parse_item、メタ= { " 項目":response.meta [ " 項目" ]}) インデックス + = 1 デフparse_item(自己、応答): プリント(response.meta) sellLinks = response.css(" ul.sellListContent> LI> " ) のためのリンクでsellLinks: URL = link.xpath(" ./@href " )に.get() プリント(URL) 収率 scrapy.Request(URL = URL、コールバック= self.parse_detail、メタ= { " 項目":response.meta [ " 項目" ]}) デフparse_detail(自己、応答): アイテム = response.meta [ " 項目" ] 印刷(response.meta) 項目[ " URL " ] = response.url 項目[ " ブロック" ] = response.css(" div.areaName> span.info ").xpath(" ./a [1] /テキスト()" )に.get()。ストリップ() 項目[ " smallBlock " ] = response.css(" div.areaName> span.info ").xpath(" ./a [2] /テキスト()" )に.get()。ストリップ() 項目[ " 価格" ] = response.xpath(" //スパン[@クラス= '合計'] /テキスト()")に.get()。ストリップ()+ " 万" の項目[ " 単価" ] =応答。 XPathの(" //スパン[@クラス= 'unitPriceValue'] /テキスト()")に.get()。ストリップ()+ " 元/平米" プリント(アイテム)
もう一つは、設定ファイル(settings.py)にあります:
その上にセットアップファイルにいくつかの設定を追加します。
SCHEDULER = " scrapy_redis.scheduler.Scheduler " DUPEFILTER_CLASS = " scrapy_redis.dupefilter.RFPDupeFilter " ITEM_PIPELINES = { ' DistributedSpider.pipelines.DistributedspiderPipeline ' 300 、 ' scrapy_redis.pipelines.RedisPipeline ':400 } REDIS_HOST = 「localhostの」 #のアドレスは、接続にしたいデータベースをRedisの REDIS_PORT = 「6379 」 #データベースが起動時にデフォルトのポートのRedis