scrapy-Redisのは、クロールフルステーション分散データを達成します

需要

  • scrapy +駅の58都市、北京、中古住宅のデータをクロール分散のRedis

環境

  • win10
  • pycharm2019.2
  • python3.7
  • scrapyモジュール| scrapy_redisモジュールは|データベースのRedis

需要

  • クロールスパイダーまたはCrawlSpiderに基づいて二手住宅情報
  • マシンは、中古住宅の情報をクロールするため、分散環境をセットアップします
  • 分散環境で複数のマシンをセットアップし、同時に二手の住宅のデータで複数のマシンをクロール

符号化処理

STEP1:ターミナルで次のコマンドを入力して、プロジェクトを作成します。

scrapy startproject bj58Pro

STEP2:プロジェクトに、CrawlSpiderの爬虫類に基づいてファイルを作成します

cd bj58Pro
scrapy genspider -t crawl bj2sh www.xxx.com

STEP3:items.pyのデータファイルの定義を取得

# items.py
import scrapy

class Bj58ProItem(scrapy.Item):
    title = scrapy.Field()      # 二手房信息标题
    desc = scrapy.Field()       # 详细信息描述
    addr = scrapy.Field()       # 地址
    price = scrapy.Field()      # 价格

STEP4:bj2sf.pyのデータファイルを解析

  • リーダーパケット from scrapy_redis.spiders import RedisCrawlSpider
  • B Bj2sfSpider親はRedisCrawlSpiderを修正します
  • Cノートallowed_domainsとstart_urls
  • D定義されましたredis_key = 'bj2sf'
  • 電子駅で定義されたルールは、データリンク抽出クロールを解析し、 link = LinkExtractor(allow=r'/ershoufang/pn\d+')
  • F parse_item()メソッドの定義データ解析ルール
# bj2sf.py
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from scrapy_redis.spiders import RedisCrawlSpider
from bj58Pro.items import Bj58ProItem

class Bj2sfSpider(RedisCrawlSpider):
    name = 'bj2sf'
    # allowed_domains = ['www.xxx.com']
    # start_urls = ['https://bj.58.com/ershoufang/']
    redis_key = 'bj2sf'
    link = LinkExtractor(allow=r'/ershoufang/pn\d+')
    rules = (
        Rule(link, callback='parse_item', follow=True),
    )

    def parse_item(self, response):
        item = Bj58ProItem()
        li_list = response.xpath('/html/body/div[5]/div[5]/div[1]/ul/li')
        for li in li_list:
            item["title"] = li.xpath('./div[2]/h2/a/text()').get()
            item["desc"] = li.xpath('./div[2]/p[1]/span/text()').getall()
            item["addr"] = li.xpath('./div[2]/p[2]/span/a/text()').getall()
            item["price"] = li.xpath('./div[3]/p//text()').getall()
            yield item

STEP5:プロファイルの設定scrapy_redisパラメータは、分散爬虫類

# settings.py

BOT_NAME = 'bj58Pro'
SPIDER_MODULES = ['bj58Pro.spiders']
NEWSPIDER_MODULE = 'bj58Pro.spiders'

USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'

# Obey robots.txt rules
ROBOTSTXT_OBEY = False
# LOG_LEVEL = 'ERROR'

ITEM_PIPELINES = {
    'scrapy_redis.pipelines.RedisPipeline': 400,
}
#增加了一个去重容器类的配置, 作用使用Redis的set集合来存储请求的指纹数据, 从而实现请求去重的持久化
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
#使用scrapy-redis组件自己的调度器
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
#配置调度器是否要持久化, 也就是当爬虫结束了, 要不要清空Redis中请求队列和去重指纹的set。如果是True, 就表示要持久化存储, 就不清空数据, 否则清空数据
SCHEDULER_PERSIST = True

# 指定redis数据库的连接参数
REDIS_HOST = '127.0.0.1'
REDIS_PORT = 6379
REDIS_ENCODING = "utf-8"

STEP6:オープンRedisのサーバーとクライアントのサービス

STEP7:ファイル名を指定して実行プロジェクト、ディレクトリにクモ、次のコマンド入力端子

scrapy runspider bj2sf.py

STEP8:入力して、任意のRedisのクライアントを見つける:lpush redis_key始まるURL

lpush bj2sf https://bj.58.com/ershoufang/

おすすめ

転載: www.cnblogs.com/liuxu2019/p/12112728.html