1. scrapy多个items类piplines如何分别存储

见简书,用if isinstance(item, items.py里面的类)进行判断就可以了。

2. Linux安装Scrapy

linux: ubuntu16.04-64bit
python: 3.5.2

2.1 安装环境

sudo apt-get install build-essential
sudo apt-get install python3-dev
sudo apt-get install libxml2-dev
sudo apt-get install libxslt1-dev
sudo apt-get install python3-setuptoolssudo apt-get install libssl-dev
apt-get install libffi-dev

2.2 安装Scrapy: [scrapy运行必备组件需要(OpenSSL, lxml(lxml一般默认有安装,可以import xml验证是否有安装))]

sudo python3 -m pip install Scrapy

2.3 安装OpenSSL:

sudo python3 -m pip install pyopenssl

2.4 重新安装python3版本的这两个软件:

sudo apt-get install python3-dev
sudo apt-get install python3-setuptools

2’ 教学视频讲解的安装的方法

2.1 安装操作系统级的配置

sudo apt-get install python3-dev build-essential python3-pip libxml2-dev libxslt1-dev zlib1g-dev libffi-dev libssl-dev
如果出错 unable to fetch some archieve,maybe run apt-get update or...,可能太旧了,更新下
su
apt-get update
再运行命令

2.2 安装项目依赖的包

windows写好的scrapy文件

cmd到文件目录
将安装的包都冻结,重定向到项目下的requirements.txt文件中
pip freeze > requirements.txt

2.3 xshell读取包内容

sz
rz
找到文件传输
安装包
pip install virtualenvwrapper
mkvirtualenv -p /usr/bin/python3 crawler-env # 自己写的虚拟环境名字
创建虚拟环境后自动进入
pip install -r requirements.txt
一次性把依赖的包全部安装完成
会报错找不到pywin32包,进入文件删掉这个包就可以了,再安装就可以

3. xshell服务器拒绝密码

想着可能自己忘记密码了,答案见3.1,都是泪
参考百度知道
问题解决不了,没办法卸载重新安装
答案:通过看YouTube视频,解决了该问题,原来用户名和密码都是自己在Ubuntu设的,蠢哭了><

4. 切换root显示su:认证失败

sudo passwd
更新密码
重新执行就好了

5. pip install virtualenvwrapper出错

错误类型:/usr/bin/pip: 行 11: 未预期的符号 __main__._main' 附近有语法错误 /usr/bin/pip: 行 11: sys.exit(main._main())’

解决方法:获得root权限

python3 -m pip install xxxx

安装完

root@wangjinliang-virtual-machine:~# vim .bashrc
root@wangjinliang-virtual-machine:~# source ~/.bashrc
/usr/bin/python: No module named virtualenvwrapper
virtualenvwrapper.sh: There was a problem running the initialization hooks.If Python could not import the module virtualenvwrapper.hook_loader,
check that virtualenvwrapper has been installed for
VIRTUALENVWRAPPER_PYTHON=/usr/bin/python and that PATH is
set properly.

python安装位置 /usr/bin
vitualenvwrapper /usr/local/lib/python3.5/dist-packages
进入虚拟环境步骤:

source ~/.bashrc
mkvirtualenv -p /usr/bin/python3 crawler-env
sz
rz
pip install -r requirements.txt

6.mkvirtualenv:未找到命令

先尝试下切换成root,输入之前的命令,如果不行,再尝试以下方法
1.升级python包管理工具pip

pip install --upgrade pip备注:当你想升级一个包的时候 pip install --upgrade 包名

2.python虚拟环境安装

sudo apt-get install python-virtualenvsudo easy_install virtualenvwrapper

上述工具装好后找不到mkvirtualenv命令,需要执行以下环境变量设置。

1.创建目录用来存放虚拟环境 mkdir \$HOME/.virtualenvs
2.在~/.bashrc中添加行:

export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh

3.运行: source ~/.bashrc

3.创建python虚拟环境

mkvirtualenv [虚拟环境名称]workon [虚拟环境名称]

4.退出虚拟环境 离开 deactivate

6.2 windows虚拟环境的安装和配置

挖坑待填

7.改造为scrapy-redis

7.1 在spider里面修改

from scrapy_redis.spiders import RedisSpider
class SfwSpider(RedisSpider):

7.2 将爬虫的start_urls删掉,增加redis_key=“xxx”

redis_key作用就是在redis中控制爬虫启动,爬虫的第一个url就是在redis中通过这个发送的

    # start_urls = ['http://www.fang.com/SoufunFamily.htm']redis_key = "fang:start_urls"

7.3 修改配置文件

7.3.1 网络上搜集得到的

#启用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'#最大空闲时间防止分布式爬虫因为等待而关闭#SCHEDULER_IDLE_BEFORE_CLOSE = 10#将清除的项目在redis进行处理ITEM_PIPELINES={'scrapy_redis.pipelines.RedisPipeline':300}#序列化项目管道作为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'

7.3.2 实践中需要的

# Scrapy-Redis相关的配置:
# 确保request存储到redis中
SCHEDULER = "scrapy_redis.scheduler.Scheduler"# 确保所有爬虫共享相同的去重指纹
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"# 设置redis为item pipeline
ITEM_PIPELINES = {'scrapy_redis.pipelines.RedisPipeline': 300
}
#不清除Redis队列、这样可以暂停/恢复 爬取
SCHEDULER_PERSIST = True# 设置链接redis信息
REDIS_HOST = '192.168.252.1'
REDIS_PORT = 6379

7.4

项目打包,Linux虚拟环境下解包,

sz rz

进入spider目录

scrapy runspider sfw

开始监听状态
主机打开redis-cli
推入一个开始的url链接

λ redis-cli
127.0.0.1:6379> lpush fang:start_urls http://www.fang.com/SoufunFamily.htm

8.redis

8.1 Linux的redis下载

下载地址
官网直接有下载安装步骤
或者观看菜鸟教程

8.2 配置其他机器连接本机

8.2.1 视频教学得到

需要修改本机的redis.conf的配置文件,将bind改为bind[自己的ip地址或者0.0.0.0]
注意:bind的是本机网卡的ip地址,而不是想让其他机器连接的ip地址。
redis.conf
如何扎到Ubuntu的redis.conf
slave端无需启动redis-server,Master端启动即可。只要slave端取到Master的redis数据库,就表示连接成功,可以分布式。

8.2.2下边是自己实践:

老是报错:Redis protected-mode 配置文件没有真正启动

  • 查看主机和虚拟机能否互相ping通,最开始自己忽略了,主机能ping通虚拟机,但是虚拟机ping不通主机
    解决方案: windows的防火墙没有打开ICMPv4-in这个规则,防火墙→高级→入站规则→配置文件类型为“公用”的“文件和打印共享(回显请求 – ICMPv4-In)”规则,设置为允许。
  • 修改主机的redis.conf 进入文件sudo vim /etc/redis/redis.conf
    • bind 127.0.0.1改为 #bind 127.0.0.1
    • protected-mode yes 改为 protected-mode no
    • 加入 daemonize no(这个是是否在后台启动不占用一个主程窗口)
    • 如果需要设置密码,requirepass foobared修改个强度高的密码
  • 启动服务的时候需要将配置文件作为参数,例如:
D:\pythonic\redisλ redis-server.exe redis.windows.conf

9.离线后重启

scrapy分布式碰到的一些问题和解决方案相关推荐

  1. scrapy分布式爬虫案例

    关于 Redis Redis 是目前公认的速度最快的基于内存的键值对数据库 Redis 作为临时数据的缓存区,可以充分利用内存的高速读写能力大大提高爬虫爬取效率. 关于 scrapy-redis sc ...

  2. python分布式爬虫框架_python之简单Scrapy分布式爬虫的实现

    分布式爬虫:爬虫共用同一个爬虫程序,即把同一个爬虫程序同时部署到多台电脑上运行,这样可以提高爬虫速度. 在默认情况下,scrapy爬虫是单机爬虫,只能在一台电脑上运行,因为爬虫调度器当中的队列queu ...

  3. scrapy 分布式爬虫- RedisSpider

    scrapy 分布式爬虫- RedisSpider 爬去当当书籍信息 多台机器同时爬取,共用一个redis记录 scrapy_redis 带爬取的request对象储存在redis中,每台机器读取re ...

  4. Python爬虫从入门到放弃(二十)之 Scrapy分布式原理

    原文地址https://www.cnblogs.com/zhaof/p/7306374.html 关于Scrapy工作流程回顾 Scrapy单机架构 上图的架构其实就是一种单机架构,只在本机维护一个爬 ...

  5. Scrapy分布式原理及Scrapy-Redis源码解析(待完善)

    1 Scrapy分布式原理 2 队列用什么维护 首先想到的可能是一些特定数据结构, 数据库, 文件等等. 这里推荐使用Redis队列. 3 怎样来去重 保证Request队列每个request都是唯一 ...

  6. Jmeter工具使用-分布式架构和服务器性能监控解决方案

    Jmeter工具使用-分布式架构和服务器性能监控解决方案 参考文章: (1)Jmeter工具使用-分布式架构和服务器性能监控解决方案 (2)https://www.cnblogs.com/zhengs ...

  7. Scrapy分布式爬虫打造搜索引擎 - (三)知乎网问题和答案爬取

    Python分布式爬虫打造搜索引擎 基于Scrapy.Redis.elasticsearch和django打造一个完整的搜索引擎网站 推荐前往我的个人博客进行阅读:http://blog.mtiany ...

  8. scrapy分布式爬虫原理(scrapy_redis)

    scrapy分布式爬虫及scrapy_redis 分布式原理 scrapy--redis实现分布式 scrapy_redis源码 分布式原理 在学习完scrapy基本知识后,大多数爬虫应用了scrap ...

  9. Python爬虫大战、 Scrapy分布式原理以及分布式部署

    Python爬虫大战 爬虫与发爬虫的厮杀,一方为了拿到数据,一方为了防止爬虫拿到数据,谁是最后的赢家? 重新理解爬虫中的一些概念 爬虫:自动获取网站数据的程序 反爬虫:使用技术手段防止爬虫程序爬取数据 ...

最新文章

  1. CLLocationCoordinate2D 用法 和一个最隐蔽的错误
  2. 人工智能的核心是“算法”,医生才是主角!
  3. 使用代理网络配置maven,显示导入失败的原因
  4. JAVA.NET.SOCKETEXCEPTION: TOO MANY OPEN FILES
  5. 控件尺寸规范_微信小程序设计规范你了解多少
  6. 客制化NVRAM的以太网地址
  7. MySQL 如何利用做排序
  8. WITH RECOMPILE和OPTION(RECOMPILE)区别
  9. matlab imadjust将暗图像分别在RGB与HSV域增加亮度
  10. 帆软填报报表的使用教程
  11. 图片拉伸:拉伸两边,保持中间不动
  12. 计算机应用技术一班班徽,1班班徽设计图片大全欣赏
  13. Ubuntu (20.4,最新版)安装及简单入门操作
  14. 人工智能大作业——五子棋
  15. oracle报错——字符集不匹配
  16. 前端项目搭建部署全流程(一):搭建React项目
  17. python 计算召回率的程序_python实现计算精度、召回率和F1值
  18. 目前市场上流行的嵌入式操作系统
  19. 美国食品药品监督管理局宣布将研究区块链技术
  20. Viewpager+Fragment+webview中的输入框不弹出软键盘的坑

热门文章

  1. 使用化学烧伤创建自定义的详细木材燃烧图案
  2. (八)Colaboratory在谷歌云盘的使用
  3. YOLOv5官方教程
  4. eWebEditor不能正常使用的解决办法
  5. 计算机如何访问苹果6s的相册,如何在电脑中打开苹果手机中的HEIC格式的照片?...
  6. 在预测中使用LSTM架构的最新5篇论文推荐
  7. 进 /user/用户名/Library/Application Support/
  8. 四门轿跑 标致发布Exalt概念车设计图
  9. Android 更新版本 应用程序未安装 解决办法
  10. Java题目:动物声音模拟器