scrapy和scrapy-redis框架

news/2024/7/19 11:28:00 标签: python, 数据库, 爬虫

1、scrapy

scrapy作为一款优秀的爬虫框架,在爬虫方面有这众多的优点。能快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。

 

 

它的主要组件有如下几种:

引擎(Scrapy):用来处理整个系统的数据流处理, 触发事务(框架核心)

调度器(Scheduler):用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址

下载器(Downloader):用于下载网页内容, 并将网页内容返回给蜘蛛(Scrapy下载器是建立在twisted这个高效的异步模型上的)

爬虫(Spider):爬虫是主要干活的, 用于从特定的网页中提取自己需要的信息, 即所谓的实体(Item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面

项目管道(pipelines):负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。当页面被爬虫解析后,将被发送到项目管道,并经过几个特定的次序处理数据。

下载器中间件(Downloader Middlewares):位于Scrapy引擎和下载器之间的框架,主要是处理Scrapy引擎与下载器之间的请求及响应

爬虫中间件(Spider Middlewares):介于Scrapy引擎和爬虫之间的框架,主要工作是处理蜘蛛的响应输入和请求输出。

调度中间件(Scheduler Middlewares):介于Scrapy引擎和调度之间的中间件,从Scrapy引擎发送到调度的请求和响应。

2、常用功能

1.创建scrapy项目:

scrapy startproject xxx
scrapy genspider baidu baidu.com
scrapy crawl baidu

 

2.start_requests方法

在启动scrapy项目会默认运行start_requests方法,通过重写这个方法可以实现很多功能

 

3.配置DUPEFILTER_CLASS

配置DUPEFILTER_CLASS可以达到去重,可以用scrapy的也可以用scrapy-redis的。

 

4.自动携带cookie

在获取请求时加上参数 meta={'cookiejar': True}  可以实现自动携带cookie,这样就不需要自己写了。

 

5.通过下载中间件实现代理

在Middlewares.py 里的xxDownloaderMiddleware类中的process_request方法里可以设置代理,设置request.meta['proxy'] 就行

 

3、scrapy-redis

使用这个首先需要安装redis,这个不说。scrapy-redis常用的设置有如下一些:

 1 去重+调度器:
 2 REDIS_HOST = '127.0.0.1'                            # 主机名
 3 REDIS_PORT = 6379                                   # 端口
 4 # REDIS_URL = 'redis://user:pass@hostname:9001'       # 连接URL(优先于以上配置)
 5 REDIS_PARAMS  = {}                                  # Redis连接参数             默认:REDIS_PARAMS = {'socket_timeout': 30,'socket_connect_timeout': 30,'retry_on_timeout': True,'encoding': REDIS_ENCODING,})
 6 # REDIS_PARAMS['redis_cls'] = 'myproject.RedisClient' # 指定连接Redis的Python模块  默认:redis.StrictRedis
 7 REDIS_ENCODING = "utf-8"
 8 
 9 # 有引擎来执行:自定义调度器
10 # from scrapy_redis.scheduler import Scheduler
11 SCHEDULER = 'scrapy_redis.scheduler.Scheduler'
12 
13 SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.PriorityQueue'          # 默认使用优先级队列(默认),其他:PriorityQueue(有序集合),FifoQueue(列表)、LifoQueue(列表)
14 SCHEDULER_QUEUE_KEY = '%(spider)s:requests'                         # 调度器中请求存放在redis中的key
15 SCHEDULER_SERIALIZER = "scrapy_redis.picklecompat"                  # 对保存到redis中的数据进行序列化,默认使用pickle
16 SCHEDULER_PERSIST = False                                            # 是否在关闭时候保留原来的调度器和去重记录,True=保留,False=清空
17 SCHEDULER_FLUSH_ON_START = True                                     # 是否在开始之前清空 调度器和去重记录,True=清空,False=不清空
18 # SCHEDULER_IDLE_BEFORE_CLOSE = 10                                    # 去调度器中获取数据时,如果为空,最多等待时间(最后没数据,未获取到)。
19 SCHEDULER_DUPEFILTER_KEY = '%(spider)s:dupefilter'                  # 去重规则,在redis中保存时对应的key
20 SCHEDULER_DUPEFILTER_CLASS = 'scrapy_redis.dupefilter.RFPDupeFilter'# 去重规则对应处理的类
21 DUPEFILTER_DEBUG = False

 

通过对这些配置进行更改就可以实现scrapy-redis了,当然有些代码还是需要改的。

转载于:https://www.cnblogs.com/xingkongyihao/p/9297435.html


http://www.niftyadmin.cn/n/976041.html

相关文章

[MAC OS] 解压Assets.car获取资源图片

reference to : http://www.jianshu.com/p/a5dd75102467 今天想获取APP的资源,但是查看xxx.app文件夹里面,缺少了大部分资源。在文件夹里面发现Assets.car这个文件,发现文件很大有40多M,猜想图片资源会不会被压缩到这里面了&…

简单易懂的谈谈 javascript 中的继承

知识储备 ECMAScript 2015 中引入的 JavaScript 类实质上是 JavaScript 现有的基于原型的继承的语法糖。类语法不会为JavaScript引入新的面向对象的继承模型。 我们知道 js 并没有类的概念,所谓的类是在原型链的基础之上。例如我们通常所使用的 function 实际上是继…

图像处理——人脸情绪识别(python卷积神经网络)

文章目录前言一、项目背景二、项目任务三、数据说明四、项目步骤1.图片基本情况查看2.图片处理3.模型构建4.模型训练5.验证集验证模型效果6.使用模型进行预测总结前言 这是我第一次做图像处理的项目,项目基于科大讯飞和Datawhale的一个小比赛,模型效果一…

input输入手机号增加空格

input输入手机号增加空格&#xff0c;点击按钮获取手机号时去掉空格。<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>input输入手机号增加空格</title> <meta name"viewport" c…

IPSEC *** 的NAT穿越详解

IPSec是基于网络层的&#xff0c;不能穿越通常的NAT、防火墙&#xff0c;这篇文章就是要讨论&#xff0c;在需要NAT网络的环境中&#xff0c;如果使用IPsec 隧道技术。IPsec 协议有两种运行模式&#xff1a;IPSec隧道模式 IPSec传输模式 隧道模式通常是建立在双方的网关之间的…

priya-dwivedi关于人脸情绪识别

紧接我的实战项目——人脸情绪识别 Kaggle开源数据集(人脸情感识别 FER)——priya-dwivedi训练的一个六层卷积神经网络模型 链接&#xff1a;https://github.com/priya-dwivedi/face_and_emotion_detection 使用这个模型就看/src/facial_detection_recog_emotion.ipynb这个…

sphinx是支持结果聚类的

Coreseek 4.1 参考手册 / Sphinx 2.0.1-beta Sphinx--强大的开源全文检索引擎&#xff0c;Coreseek--免费开源的中文全文检索引擎 版权 © 2001-2011 Andrew Aksyonoff 版权 © 2008-2011 Sphinx Technologies Inc, http://sphinxsearch.com 版权 © 2006-2011 选择…

B站系列(一):selenium模拟用户登陆

前言 Bilibili的大多数公开视频是不用登陆就可以爬取的&#xff0c;但有部分内容是需要进行登录后才能爬取。这篇文章针对B站的模拟登陆展开介绍。 一、环境准备 我使用的是python3.8 selenium Chrome&#xff0c;使用pip install selenium -i https://pypi.tuna.tsinghua.…