使用流程
Redis基于記憶體,讀寫速度快,也可做持久化,但是記憶體空間有限,當資料量超過記憶體空間時,需擴充記憶體,但記憶體價格貴;
MySQL基于磁盤,讀寫速度沒有Redis快,但是不受空間容量限制,成本效益高;
大多數的應用場景是MySQL(主)+Redis(輔),MySQL做為主存儲,Redis用于緩存,加快通路速度。需要高性能的地方使用Redis,不需要高性能的地方使用MySQL。存儲資料在MySQL和Redis之間做同步;
- 下載下傳 pip install scrapy-redis
- 下載下傳 redis資料庫 下載下傳穩定版
- 安裝教程
- 配置redis
'''[終端]cd到目錄'''
'''[終端]vi redis.conf 利用vim修改配置'''
【修改内容】
1. bind 127.0.0.1 注釋掉(否則隻運作本機進行連結)
2. protected-mode no 關閉保護模式 改為no
- 基于配置檔案進行開啟redis
終端: cd到目下的src檔案 ./redis-server ../redis.conf
- 用戶端連結
終端: redis-cli
如何強制關閉sever服務
終端 sudo pkill redis-server
- 建立項目
scrapy startproject 工程名 (建立項目)
- 建立crawlSpider爬蟲
scrapy genspider -t crawl 爬蟲名 起始url
至此已做好前期準備工作
setting配置
- 其他電腦上爬必須配置redis!!
# 19行 請求身份僞裝user_agent 定義
USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'
# 22行 是否遵從robots協定(君子協定)
ROBOTSTXT_OBEY = False
# redis管道配置
ITEM_PIPELINES = {
'scrapy_redis.pipelines.RedisPipeline': 400,
# 'redisPro.pipelines.RedisproPipeline': 300,
}
# redis排程器配置
# 使用scrapy-redis元件的去重隊列
DUPEFILTER_CLASS = 'scrapy_redis.dupefilter.RFPDupeFilter'
# 使用scrapy-redis元件自己的排程器
SCHEDULER = 'scrapy_redis.scheduler.Scheduler'
# 是否允許暫停,以外關機後,重新開繼續爬
SCHEDULER_PERSIST = True
# 注意!!!
# 如果redis資料庫伺服器不在本機,那麼需要配置~~
# REDIS_HOST = 'redis伺服器ip'
# REDIS_PORT = 6379
代碼
# 父類替換
from scrapy_redis.spiders import RedisCrawlSpider # 父類替換
from redisPro.items import RedisproItem # 自己定義的item類
class QiubaiSpider(RedisCrawlSpider): # 父類改為 RedisCrawlSpider
name = 'qiubai'
# 排程器隊列名稱
redis_key = 'qiubaispider' # 和 start_urls同理
# 正則連結分頁 提取器
link = LinkExtractor(allow=r'/pic/page/\d+')
# 規則解析器接收到連結提取器的連結,後對連結發起請求,擷取内容根據規則進行解析
# follow參數:是否自動在 被提取的頁面中繼續提 (自動去重)
rules = (
Rule(link, callback='parse_item', follow=True),
)
def parse_item(self, response):
div_list = response.xpath('//div[@id="content-left"]/div')
for div in div_list:
img_url = 'https:' + div.xpath('.//div[@class="thumb"]/a/img/@src').extract_first()
item = RedisproItem()
item['img_url'] = img_url
# 原始的scrapy管道不支援分布式!!!
# 用redis架構封裝的管道!!!和排程器!! 在setting中配置
yield item
1. 執行分布爬蟲方法
【終端】cd到 cd 項目/spiders/
【終端】允許爬蟲的py檔案 scrapy runspider 爬蟲檔案.py
執行後等待排程器配置設定
2. 把url扔到排程器隊列
【終端】【redis用戶端連接配接上後】 lpush 排程器隊列名(爬蟲中設定的) 起始url