scrapy,redis分布式爬取貓眼電影!

2021-09-27 04:22:16 字數 3647 閱讀 4992

能夠利用redis快取資料庫的優點去重來避免資料的大面積冗餘

1、首先就是要建立貓眼爬蟲專案

2、進入專案內部建立乙個爬蟲檔案

建立完檔案之後就是要爬取的內容,我這邊以爬取貓眼電影的title和link為例(這個完全看個人你可以先去寫爬蟲,然後再來寫items檔案)

3、編寫item檔案

python資源共享群:626017123

class maoyantestitem(scrapy.item):

# define the fields for your item here like:

# name = scrapy.field()

title = scrapy.field()

link = scrapy.field()

pass

4、編寫爬蟲檔案(確定自己要爬的內容,然後與items中的指定字段連線起來)

yield item5、編寫pipline檔案:--> 這裡面主要是通過redis快取資料庫來對資料進行篩選,然後將資料主要儲存到mysql中

首先配置settings檔案

# 這個是需要手動加上的,通過scrapy-redis自帶的pipeline將item存入redis中

item_pipelines =

# 啟動redis自帶的去重

dupefilter_class = "scrapy_redis.dupefilter.rfpdupefilter"

# 啟用排程器

scheduler = "scrapy_redis.scheduler.scheduler"

# 是否在關閉spider的時候儲存記錄

scheduler_persist = true

# 使用優先順序排程請求佇列(預設使用)

scheduler_queue_class =

'scrapy_redis.queue.spiderpriorityqueue'

# 指定redis的位址和埠,有密碼的需要加上密碼

redis_host = '127.0.0.1'

redis_port = '6379'

redis_params =

#scheduler_queue_key = '%(spider)s:requests' # 排程器中請求存放在redis中的key

#scheduler_serializer = "scrapy_redis.picklecompat" # 對儲存到redis中的資料進行序列化,預設使用pickle

#scheduler_flush_on_start = false # 是否在開始之前清空 排程器和去重記錄,true=清空,false=不清空

# scheduler_idle_before_close = 10 # 去排程器中獲取資料時,如果為空,最多等待時間(最後沒資料,未獲取到)。

#scheduler_dupefilter_key = '%(spider)s:dupefilter' # 去重規則,在redis中儲存時對應的key chouti:dupefilter

#scheduler_dupefilter_class = 'scrapy_redis.dupefilter.rfpdupefilter' # 去重規則對應處理的類

#dupefilter_debug = false

#上述的擴充套件類需要的

myext_enabled = true # 開啟擴充套件

idle_number = 10 # 配置空閒持續時間單位為 10個 ,乙個時間單位為5s

#如果為true,則使用redis的'spop'進行操作。

#因為本次請求每一次帶上的都是時間戳,所以就用了lpush

#如果需要避免起始**列表出現重複,這個選項非常有用。開啟此選項urls必須通過sadd新增,否則會出現型別錯誤。

#redis_start_urls_as_set = true

之後就是要在pipeline檔案中將真是的資料儲存到mysql中:

import pymysql

class maoyantestpipeline(object):

comments =

def __init__(self):

self.conn = pymysql.connect(

host='localhost',

user='root',

passwd='123456',

port=3306,

db='spider',

charset='utf8',

autocommit=true

)self.cursor = self.conn.cursor()

def process_item(self, item, spider):

if len(self.comments) == 1:

self.insert_to_sql(self.comments)

self.comments.clear()

return item

def close_spider(self, spider):

self.insert_to_sql(self.comments)

def insert_to_sql(self, data):

try:

sql = 'insert into maoyan_movie (title, link) values (%s, %s);'

print(data)

self.cursor.executemany(sql, data[0])

except:

print('插入資料有誤...')

self.conn.rollback()

10 給予scrapy redis的分布式爬蟲

pip install scrapy redis scrapy redis提供了兩種爬蟲 from scrapy redis.spiders import redisspider class myspider redisspider spider that reads urls from redis...

scrapy redis分布式爬蟲

依賴環境 scrapy 1.1 redis 2.8 分布式爬蟲 將乙個專案拷貝到多台電腦上,同時爬取資料。1.必須保證所有電腦上的 是相同的配置。2.在其中一台電腦上啟動redis和mysql的資料庫服務。3.同時將所有的爬蟲專案執行起來。4.在啟動redis和mysql資料庫的電腦上,向redis...

scrapy redis分布式爬蟲

話不多說,先上scrapy scrapy流程圖 流程圖所示 當客戶端從伺服器端拿去任務進行資料爬取時,客戶端產生的資料,url 會再次提交給伺服器,進行資料抓取,產生新的response,在爬取的時候,產生的大量資料,可能會導致爬蟲的速度變慢,占用redis大量的儲存空間。scrapy redis常...