1.spider 修改

class CgysSpider(scrapy.Spider):
    name = 'clispider'
    start_urls = ['https://search.bilibili.com/all?keyword=%E6%A9%99%E6%9E%9C%E5%8C%BB%E7%94%9F']
# 改成
from scrapy_redis.spiders import RedisSpider
class ClispiderSpider(RedisSpider):
    name = 'clispider'
    redis_key = 'cl5:start_urls'

2.setting.py修改

# 1(必须). 使用了scrapy_redis的去重组件,在redis数据库里做去重
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"

# 2(必须). 使用了scrapy_redis的调度器,在redis里分配请求
SCHEDULER = "scrapy_redis.scheduler.Scheduler"

# 3(必须). 在redis中保持scrapy-redis用到的各个队列,从而允许暂停和暂停后恢复,也就是不清理redis queues
SCHEDULER_PERSIST = True

# 4(必须). 通过配置RedisPipeline将item写入key为 spider.name : items 的redis的list中,供后面的分布式处理item
# 这个已经由 scrapy-redis 实现,不需要我们写代码,直接使用即可
ITEM_PIPELINES = {
    # 'AQI.pipelines.AqiJsonPipeline': 200,
    # 'AQI.pipelines.AqiCSVPipeline': 300,
    # 'AQI.pipelines.AqiRedisPipeline': 400,
    # 'AQI.pipelines.AqiMongoPipeline': 500,
    'scrapy_redis.pipelines.RedisPipeline': 100
}

# 5(必须). 指定redis数据库的连接参数
REDIS_HOST = "192.168.1.235"
REDIS_PORT = 6379
REDIS_PARAMS = {
    "password": "KangCe@0608",
}

# 6.如果不启用则按scrapy默认的策略
#  -1. 默认的 按优先级排序(Scrapy默认),由sorted set实现的一种非FIFO、LIFO方式。
# SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.SpiderPriorityQueue'
#  -2. 可选的 按先进先出排序(FIFO)
# SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.SpiderQueue'
#  -3. 可选的 按后进先出排序(LIFO)
# SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.SpiderStack'

# 7. LOG等级
#LOG_LEVEL = 'DEBUG'

3.启动scrapy-reids

scarpy crawl clispider
或者启动多个
scrapy crawlall

4.上传url到reids

lpush sinaspider:start_urls http://news.sina.com.cn/guide/

from redis import ConnectionPool, StrictRedis
import os

REDIS_HOST = "115.238.111.198"
REDIS_PORT = "6380"
REDIS_PASSWORK = "KangCe@0608"

pool = ConnectionPool(host=REDIS_HOST,
                      port=REDIS_PORT,
                      db=0,
                      password=REDIS_PASSWORK,
                      )
# password=REDIS_PASSWD)
conn = StrictRedis(connection_pool=pool)
# password=REDIS_PASSWD)

# juzi_key,coal_dict,key4
path = 'D:\\02-python\\04-work\\80-bt\\clili\\key\\aaa'
name_list = os.listdir(path)
for name in name_list:
    with open("%s\\%s" % (path, name), encoding='utf-8') as f:
        keys = set(f.readlines())
        for _key in keys:
            key = _key.strip()
            conn.lpush("juzi:start_urls",
                       "http://juzicili.com/btlist/{}.html ".format(key))  # juzikey\coal_4\coal_3\coal_2\coal_1\figu_1\figu_0\key1
            conn.lpush("diaosisou:start_urls",
                       "http://www.diaosisou.cc/list/{}".format(key))  # juzikey\coal_4\coal_3\coal_2\figu_1\figu_0\key1
            conn.lpush("cl5:start_urls",
                       "https://www.cl5.org/kw/{}.html".format(key))  # juzikey\coal_4\coal_3\coal_2\coal_1\coal_0\figu_1\figu_0\key1
            conn.lpush("sosobtx:start_urls", "https://www.sosobtx.com/s/{}.html".format(key))# juzikey\coal_4\key1
            conn.lpush("btrabbit:start_urls",
                       "https://www.btrabbit.la/search/{}".format(key))  # juzikey\coal_4\coal_3\coal_2\figu_1\figu_0\key1
            print("{}:push success".format(key))

5.常用的reids命令

keys *  查看所以建
llen key 查看列表长度

redis
redis-cli -h 192.168.1.235  -p  6379 -auth KangCe@0608
ltrim [ltrim key  range_l range_r]:保留区域类的元素,其他的删除
ltrim plist 0 3
lpop 、rpop:分别为删除头部和尾部第一个元素,返回被删除的元素
lpop plist
rpop plist

  

 

scrapy 改 scrapy-redis的更多相关文章

  1. <scrapy爬虫>scrapy命令行操作

    1.mysql数据库 2.mongoDB数据库 3.redis数据库 1.创建项目 scrapy startproject myproject cd myproject 2.创建爬虫 scrapy g ...

  2. python爬虫scrapy之scrapy终端(Scrapy shell)

    Scrapy终端是一个交互终端,供您在未启动spider的情况下尝试及调试您的爬取代码. 其本意是用来测试提取数据的代码,不过您可以将其作为正常的Python终端,在上面测试任何的Python代码. ...

  3. 第三百三十一节,web爬虫讲解2—Scrapy框架爬虫—Scrapy安装—Scrapy指令

    第三百三十一节,web爬虫讲解2—Scrapy框架爬虫—Scrapy安装—Scrapy指令 Scrapy框架安装 1.首先,终端执行命令升级pip: python -m pip install --u ...

  4. Scrapy之Scrapy shell

    Scrapy Shell Scrapy终端是一个交互终端,我们可以在未启动spider的情况下尝试及调试代码,也可以用来测试XPath或CSS表达式,查看他们的工作方式,方便我们爬取的网页中提取的数据 ...

  5. 十 web爬虫讲解2—Scrapy框架爬虫—Scrapy安装—Scrapy指令

    Scrapy框架安装 1.首先,终端执行命令升级pip: python -m pip install --upgrade pip2.安装,wheel(建议网络安装) pip install wheel ...

  6. scrapy - 给scrapy 的spider 传值

    scrapy - 给scrapy 的spider 传值 方法一: 在命令行用crawl控制spider爬取的时候,加上-a选项,例如: scrapy crawl myspider -a categor ...

  7. python - scrapy 爬虫框架 ( redis去重 )

    1.  使用内置,并加以修改 ( 自定义 redis 存储的 keys ) settings 配置 # ############### scrapy redis连接 ################# ...

  8. scrapy(2)——scrapy爬取新浪微博(单机版)

    Sina爬虫教程   Scrapy环境搭建   环境:window10 + python2.7(包含scrapy)+ mongoDB 1.1 安装集成了python2.7的anaconda   ana ...

  9. Scrapy 解决Scrapy安装时报错"Microsoft Visual C++ 14.0 is required"

    问题描述 当前环境win10,python_3.6.1,64位.在windows下,在dos中运行pip install Scrapy报错:error: Microsoft Visual C++ 14 ...

随机推荐

  1. [LeetCode] 350. Intersection of Two Arrays II 两个数组相交之二

    Given two arrays, write a function to compute their intersection. Example 1: Input: nums1 = [1,2,2,1 ...

  2. I/O多路复用-EPOLL探索

    什么是I/O多路复用 I/O多路复用就是通过一种机制,可以监视多个描述符,一旦某个IO能够读写,通知程序进行相应的读写操作. I/O多路复用的场合 1.当客户处理多个描述字时(通常是交互式输入和网络套 ...

  3. java识别死亡或者存活的对象

    那些内存需要回收 内存回收是对运行时内存区域的内存回收,其中程序计数器.虚拟机栈.本地方法栈3个区域随线程而生,随线程而灭:栈中的栈帧随着方法的进入和退出而有条不紊的执行着出栈和入栈操作.每一个栈帧中 ...

  4. 利用mysql的LOAD DATA INFILE的功能读取客户端文件

    前言:今天在浏览某知论坛时,看到某大佬在渗透过程中使用伪造的MySQL服务端读取客户端文件,此大佬在利用过程中描述得不是很详细,作为小白的我看不懂啊,由此产生了此篇文章. 某大佬文章:https:// ...

  5. Mysql Update 流程摘抄

    原文: https://blog.csdn.net/weixin_38990431/article/details/89050101#9_449 2.2.2 重要日志模块 binlog binlog是 ...

  6. 024 如何让html引用公共的头部和尾部(多个html文件公用一个header.html和footer.html)

    前端静态html页面,封装公共的头文件(header:顶部页眉,顶部导航栏等部分)和尾部文件(footer:CopyRight.友情链接等部分) 当前方法:通过load()函数,引入公共头部和尾部文件 ...

  7. Java学习:注解简介

    JAVA 注解的基本原理 以前,『XML』是各大框架的青睐者,它以松耦合的方式完成了框架中几乎所有的配置,但是随着项目越来越庞大,『XML』的内容也越来越复杂,维护成本变高. 于是就有人提出来一种标记 ...

  8. uni-app如何解决在for循环里调用异步请求获取数据顺序混乱问题?

    总结/朱季谦 先前有一次做uni-app的js接口对接时,遇到过这样的情况,在for循环里,调用一个异步请求时,返回来的值顺序是乱的,因此,在以下的代码里,push到数组里的值,每次的顺序可能都是不一 ...

  9. LearnOpenGL笔记(2)三角形

    这是学习LearnOpenGL CN教程的笔记,包括我遇到的问题和我的烂笔头.文章名与网站小节对应. ------------------------------------分割线---------- ...

  10. Qt keyevent学习笔记

    在按下一个键不放后,会发生: 1.触发keypressevent(),此时isautorepeat()返回false: 2.set isautorepeat(),使其返回值为true; 3.触发key ...