Scrapy详解
一、爬虫生态框架

在管道传数据只能传字典和items类型。



将 上一return语句注释则会报错 如:


如上图,爬虫文件中有一个name属性,如果多个爬虫可以通过这个属性在管道控制分析的是哪个爬虫的数据

日志文件

添加红框里面的一条代码,让打印结果只显示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()

怎么样是不是你想要的。
Scrapy详解的更多相关文章
- 爬虫之Scrapy详解
性能相关 在编写爬虫时,性能的消耗主要在IO请求中,当单进程单线程模式下请求URL时必然会引起等待,从而使得请求整体变慢. import requests def fetch_async(url): ...
- 【图文详解】scrapy爬虫与动态页面——爬取拉勾网职位信息(2)
上次挖了一个坑,今天终于填上了,还记得之前我们做的拉勾爬虫吗?那时我们实现了一页的爬取,今天让我们再接再厉,实现多页爬取,顺便实现职位和公司的关键词搜索功能. 之前的内容就不再介绍了,不熟悉的请一定要 ...
- 【图文详解】scrapy安装与真的快速上手——爬取豆瓣9分榜单
写在开头 现在scrapy的安装教程都明显过时了,随便一搜都是要你安装一大堆的依赖,什么装python(如果别人连python都没装,为什么要学scrapy….)wisted, zope interf ...
- 全网最全的Windows下Anaconda2 / Anaconda3里正确下载安装爬虫框架Scrapy(离线方式和在线方式)(图文详解)
不多说,直接上干货! 参考博客 全网最全的Windows下Anaconda2 / Anaconda3里正确下载安装OpenCV(离线方式和在线方式)(图文详解) 第一步:首先,提示升级下pip 第二步 ...
- scrapy (三)各部分意义及框架示意图详解
一.框架示意图 Scrapy由 Python 编写,是一个快速.高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试 ...
- 第三百五十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy信号详解
第三百五十五节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy信号详解 信号一般使用信号分发器dispatcher.connect(),来设置信号,和信号触发函数,当捕获到信号时执行 ...
- 网络爬虫之scrapy框架详解
twisted介绍 Twisted是用Python实现的基于事件驱动的网络引擎框架,scrapy正是依赖于twisted, 它是基于事件循环的异步非阻塞网络框架,可以实现爬虫的并发. twisted是 ...
- 转 Scrapy笔记(5)- Item详解
Item是保存结构数据的地方,Scrapy可以将解析结果以字典形式返回,但是Python中字典缺少结构,在大型爬虫系统中很不方便. Item提供了类字典的API,并且可以很方便的声明字段,很多Scra ...
- Scrapy框架的命令行详解【转】
Scrapy框架的命令行详解 请给作者点赞 --> 原文链接 这篇文章主要是对的scrapy命令行使用的一个介绍 创建爬虫项目 scrapy startproject 项目名例子如下: loca ...
随机推荐
- pyqt pyside QLabel 显示图片
pyqt pyside QLabel 显示图片 pixmap = QtGui.QPixmap("D:/myPicture.jpg") label.setPixmap(pixmap) ...
- C#中new的三种用法
在 C# 中,new 关键字可用作运算符.修饰符或约束. 1)new 运算符:用于创建对象和调用构造函数. 2)new 修饰符:在用作修饰符时,new 关键字可以显式隐藏从基类继承的成员. 3)new ...
- 关于ajax 返回值验证问题
如果后台返回布尔值true时 前端 if(data==true){ //true 不能加引号 否则就变成了字符串了 alert(data+'操作成功!'+status); }
- NOIP-数字反转
题目描述 给定一个整数,请将该数各个位上数字反转得到一个新数.新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2). 输入描述: 一个整数 N. 输 ...
- java遍历List中的map的几种方法
Student 类 public class Student { private String name; private int age; private int taller; public St ...
- (转)谈谈用ASP.NET开发的大型网站有哪些架构方式(成本)
在上篇文章里(http://www.cnblogs.com/ms0017/archive/2011/07/26/2117676.html),列举了国内外用ASP.NET开发的大型网站有哪些.最后提到了 ...
- 3D Slicer Hide 3D Cube and Axis Labels Programmatically 使用代码隐藏三维视图中的方框和坐标轴标签
在3D Slicer中,我们如果想在自己写的插件中来修改三维视图中的默认设置的话,那么首先就需要获得三维视图的结点,其类型为vtkMRMLViewNode,获得了这个结点后,我们就可以用代码来修改一系 ...
- poj 1375
一道解析几何么,,, 其实就是求直线与圆的切线. 看到方法有很多,比如根据角度之类的. 这里主要用到了初中的几何知识. 考虑这幅图. 首先可以根据相似三角形知道b的长度,同时圆心与点的方向也知道. 那 ...
- day25:接口类和抽象类
1,接口类和抽象类知识背景:一开始在程序界是没有这些概念的,后来就流行了一种语言叫做JAVA,JAVA是一种典型的纯面向对象的语言,JAVA写的程序都是非常适用于更庞大的项目,很多程序员就总结出了一些 ...
- C# Collection 排序
Collection<int> aa = new Collection<int>(); aa.Add(1); aa.Add(2); aa.Add(3); aa.Add(1); ...