1、爬虫生态框架python
在管道传数据只能传字典和items类型。git
将 上一return语句注释则会报错 如:github
如上图,爬虫文件中有一个name属性,若是多个爬虫能够经过这个属性在管道控制分析的是哪一个爬虫的数据redis
日志文件shell
添加红框里面的一条代码,让打印结果只显示warning级别及以上的警告数据库
如何保存日志信息浏览器
发现运行后没有任何输出缓存
项目中多了log.log日志文件数据结构
打开log.log日志文件即日志信息框架
items类型对象
在items文件中声明了name、last的键在爬虫文件中声明便可用
scrapy shell 用法
scrapy shell + 网址 会进入一个ipython能够测试response 如:
模仿浏览器
改成本身浏览器的user_agent信息
更改遵照robots规则
将True改成False
提取下一页url: scrapy.Request(url, callback)用来获取网页里的地址
callback:指定由那个函数去处理
分布式爬虫:
1.多台机器爬到的数据不能重复
2.多台机器爬到的数据不能丢失
1.redis是什么?
Redis是一个开源的、内存数据库,他能够用做数据库、缓存、消息中间件。它支持多种数据类型的数据结构,如字符串、哈希、列表、集合、有序集合(可能存在数据丢失)
redis安装 Ubuntu: sudo apt-get install redis-server Centos:sudo yum install redis-server
检测redis状态
redis服务的开启:sudo /etc/init.d/redis-server start
重启:sudo /etc/init.d/redis-server restart
关闭:sudo /etc/init.d/redis-server stop
redis链接客户端:redis-cli
redis远程链接客户端:redis-cli -h<hostname> -p <port>(默认6379)
redis经常使用命令:
选择数据库:select 1 (第一个数据库为0 ,默认16个数据库,可修改配置文件修改数据库个数且个数没有上限)
查看数据库里的内容:keys *
向数据库加列表:lpush mylist a b c d (数据可重复)
查看列表数据:lrange mylist 0 -1
查看列表元素个数:llen mylist
向set中加数据:sadd myset a b c d(不能重复,无序)
查看set中的数据:smembers myset
查看set中的元素个数:scard myset
向有序zset中添加数据:zadd myzset 1 a 2 b 3 c 4 d
查看zset编号和数据:zrange myzset 0 -1 withscores
查看zset数据
改变编号 如改变a的编号:
统计zset元素的个数zcard myzset
删除当前数据库:flushdb
清楚全部数据库:flushall
安装scrapy-redis
sudo pip install scrapy_redis
下载scrapy-redis例子:git clone https://github.com/rolando/scrapy-redis.git
setting.py中:
# 去重
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
# 调度器
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
# 调度器内容持久化
SCHEDULER_PERSIST = True
ITEM_PIPELINES = {
'example.pipelines.ExamplePipeline': 300,
# 负责把数据存储到redis数据库里
'scrapy_redis.pipelines.RedisPipeline': 400,
}
最后需把redis加上
序列化:把一个类的对象变成字符串最后保存到文件
反序列化:保存到文件的对象是字符串格式 --> 读取字符串 --> 对象
注:后台打印的数据较杂乱,我只想要本身爬到的东西怎么办?
第一步:
setting.py中加 LOG_LEVEL = 'WARNING'
这句代码会将没必要要的数据屏蔽,屏蔽的数据以下:
第二步:
然而如今还不是最简洁的,还有杂项。这样作,将response.xpath('*********')变成response.xpath('*********').extract()
怎么样是否是你想要的。