日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

scrapy-redis mysql_Scrapy-redis 分布式

發布時間:2025/3/13 数据库 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 scrapy-redis mysql_Scrapy-redis 分布式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

分布式:

架構方式

多臺真實機器+爬蟲(如requests,scrapy等)+任務共享中心

多臺虛擬機器(或者部分虛擬部分真實)+爬蟲(如requests,scrapy等)+任務共享中心

多臺容器級虛擬化機器(或者部分真實機器)+爬蟲(如requests,scrapy等)+任務共享中心

docker+redis+requests+(mysql)

docker+redis+scrapy+scrapy-redis+r(mysql)

中心節點:任務控制-通信redis,數據存儲mysql

rconn=redis.Redis("118.31.46.101","6379") #連接中心節點redis

for i in range(0,5459058):

isdo=rconn.hget("url",str(i))

if(isdo!=None): #先取出當前url判斷是否爬取過

continue

rconn.hset("url",str(i),"1") #如沒有爬過,先把url標記

try:

data=urllib.request.urlopen("http://www.17k.com/book/"+str(i)+".html").read().decode("utf-8","ignore")

except Exception as err:

print(str(i)+"----"+str(err))

continue

pat='(.*?)'

rst=re.compile(pat,re.S).findall(data)

if(len(rst)==0):

continue

name=rst[0]

print(str(i)+"-----"+str("ok"))

rconn.hset("rst",str(i),str(name)) #當前url爬完后,把數據保存

scrapy-redis

pip3 install scrapy-redis

scrapy-redis中queue三種方式:

SpiderQueue = FifoQueue #先進先出

SpiderStack = LifoQueue #后進先出

SpiderPriorityQueue = PriorityQueue #優先隊列,默認

scrapy-redis分布式部署:

中心節點安裝redis,(mysql)

各子節點均安裝python,scrapy,scrapy-redis,python的redis模塊,(pymysql)

將修改好的分布式爬蟲項目部署到各子節點

各子節點分別運行分布式爬蟲項目

一.修改爬蟲文件

1.導入scrapy-redis模塊:from scrapy_redis.spiders import RedisSpider

2.將當前爬蟲類的父類修改成RedisSpider

3.將allowed_domains和start_urls進行刪除

4.添加一個新的屬性redis_key = 'xxx',該屬性值表示的就是可以被共享的調度器隊列的名稱

二.進行配置文件的配置

1.保證爬蟲文件發起的請求都會被提交到可以被共享的調度器的隊列中

SCHEDULER = "scrapy_redis.scheduler.Scheduler"

2.保證爬蟲文件提交的item會被存儲到可以被共享的管道中

ITEM_PIPELINES = {

'scrapy_redis.pipelines.RedisPipeline': 400

}

3.配置最終數據存儲的redis數據庫

REDIS_HOST = 'redis服務的ip地址'

REDIS_PORT = 6379

REDIS_ENCODING = 'utf-8'

REDIS_PARAMS = {'password':'123456dj'}

4.redis數據庫的配置文件進行配置:關閉保護模式和注釋掉bind 127.0.0.1

5.開啟redis服務和客戶端

6.執行爬蟲文件:scrapy runspider xxx.py

7.向調度器隊列中仍入一個起始的url:

settings:

#使用的是可以被共享的調度器

# 增加了一個去重容器類的配置, 作用使用Redis的set集合來存儲請求的指紋數據, 從而實現請求去重的持久化

DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"

# 使用scrapy-redis組件自己的調度器

SCHEDULER = "scrapy_redis.scheduler.Scheduler"

# 配置調度器是否要持久化, 也就是當爬蟲結束了, 要不要清空Redis中請求隊列和去重指紋的set。如果是True, 就表示要持久化存儲, 就不清空數據, 否則清空數據

SCHEDULER_PERSIST = True

#使用scrapy-redis中封裝好的可以被共享的管道

ITEM_PIPELINES = {

'scrapy_redis.pipelines.RedisPipeline': 400

}

#配置redis

REDIS_HOST = '127.0.0.1'

REDIS_PORT = 6379

REDIS_ENCODING = 'utf-8'

# REDIS_PARAMS = {‘password’:’123456’}

總結

以上是生活随笔為你收集整理的scrapy-redis mysql_Scrapy-redis 分布式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。