scrapy redis相關配置,cookie池

2021-10-08 02:05:23 字數 3259 閱讀 2535

一、scrapy-redis的一些配置

#啟用redis排程儲存請求佇列

scheduler = "scrapy_redis.scheduler.scheduler"

#確保所有的爬蟲通過redis去重

dupefilter_class = "scrapy_redis.dupefilter.rfpdupefilter"

#預設請求序列化使用的是pickle 但是我們可以更改為其他類似的。ps:這玩意兒2.x的可以用。3.x的不能用

#scheduler_serializer = "scrapy_redis.picklecompat"

#不清除redis佇列、這樣可以暫停/恢復 爬取

scheduler_persist = true

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

scheduler_queue_class = 'scrapy_redis.queue.priorityqueue'

#可選用的其它佇列

#scheduler_queue_class = 'scrapy_redis.queue.fifoqueue'

#scheduler_queue_class = 'scrapy_redis.queue.lifoqueue'

#最大空閒時間防止分布式爬蟲因為等待而關閉

#這只有當上面設定的佇列類是spiderqueue或spiderstack時才有效

#並且當您的蜘蛛首次啟動時,也可能會阻止同一時間啟動(由於隊列為空)

#scheduler_idle_before_close = 10

#將清除的專案在redis進行處理

item_pipelines =

#序列化專案管道作為redis key儲存

#redis_items_key = '%(spider)s:items'

#預設使用scrapyjsonencoder進行專案序列化

#you can use any importable path to a callable object.

#redis_items_serializer = 'json.dumps'

#指定連線到redis時使用的埠和位址(可選)

#redis_host = 'localhost'

#redis_port = 6379

#指定用於連線redis的url(可選)

#如果設定此項,則此項優先順序高於設定的redis_host 和 redis_port

#redis_url = 'redis://user:pass@hostname:9001'

#自定義的redis引數(連線超時之類的)

#redis_params = {}

#自定義redis客戶端類

#redis_params['redis_cls'] = 'myproject.redisclient'

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

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

#redis_start_urls_as_set = false

#redisspider和rediscrawlspider預設 start_usls 鍵

#redis_start_urls_key = '%(name)s:start_urls'

#設定redis使用utf-8之外的編碼

#redis_encoding = 'latin1'

配置必選項

scheduler = "scrapy_redis.scheduler.scheduler"

dupefilter_class = "scrapy_redis.dupefilter.rfpdupefilter"

redis_url = 'redis://root:密碼@主機ip:埠'

log配置資訊

log_level = 'error'

to_day = datetime.datetime.now()

log_file_path = 'log/scrapy_{}_{}_{}.log'.format(to_day.year, to_day.month, to_day.day)

log_file = log_file_path

二、構建cookie池

獲取cookie

更新cookie

刪除cookie

判斷cookie是否可用進行相對應的操作(比如重試)

新建cookie.py

import requests

import json

import redis

import logging

from .settings import redis_url

logger = logging.getlogger(__name__)

##使用redis_url鏈結redis資料庫, deconde_responses=true這個引數必須要,資料會變成byte形式 完全沒法用

reds = redis.redis.from_url(redis_url, db=2, decode_responses=true)

login_url = ''

##獲取cookie

def get_cookie(account, password):

s = requests.session()

payload =

response = s.post(login_url, data=payload)

cookies = response.cookies.get_dict()

logger.warning("獲取cookie成功!(賬號為:%s)" % account)

return json.dumps(cookies)

def init_cookie(red, spidername):

redkeys = reds.keys()

for user in redkeys:

password = reds.get(user)

if red.get("%s:cookies:%s--%s" % (spidername, user, password)) is none:

cookie = get_cookie(user, password)

red.set("%s:cookies:%s--%s"% (spidername, user, password), cookie)

scrapy redis元件配置用例

dupefilter class scrapy redis.dupefilter.rfpdupefilter from scrapy redis.scheduler import scheduler from scrapy redis.queue import priorityqueue sched...

scrapy redis元件配置用例

dupefilter class scrapy redis.dupefilter.rfpdupefilter from scrapy redis.scheduler import scheduler from scrapy redis.queue import priorityqueue sched...

Scrapy Redis分布式爬蟲配置

編寫scrapy redis分布式爬蟲 要將乙個scrapy專案變成乙個scrapy redis專案秩序修改以下三點就可以了 將爬蟲的類從scrdapy.spider變成scrapy redis.spiders.redisspider 或者是從scrapy.crawlspider 變成scrapy ...