Day 22 22.1.1:增量式爬虫 - 场景1的实现
场景1的实现:
数据指纹:
- 数据的唯一标识。记录表中可以不直接存储数据本身,直接存储数据指纹更好一些。
创建爬虫爬虫文件:
- cd project_name(进入项目目录)
- scrapy genspider 爬虫文件的名称(自定义一个名字即可) 起始url
- (例如:scrapy genspider first www.xxx.com)
- 创建成功后,会在爬虫文件夹下生成一个py的爬虫文件
进入爬虫文件:
- cd 爬虫文件的名称(即自定义的名字)
可能存在的错误
redis.exceptions.DataError: Invalid input of type: 'ZlsdemoproItem'. Convert to a bytes, string, int or float first.
#只有redis版本是2.10.6才能直接把item作为字典写进去
redis可能用到的指令
keys * :查看redis数据库所有set集合名
llen 集合名:查看当前数据的数量(计数)
smembers 集合名:查看当前set集合内的数据id及名称
爬虫文件
import redis
import scrapy
import hashlib#导入生成数据指纹的模块
from ..items import ZlsdemoproItem #导入ITEM模块
class DuanzaiSpider(scrapy.Spider):
name = "duanzai"
# allowed_domains = ["www.xxx.com"]
#段子网爬取标题和内容
start_urls = ["https://www.xiaohuaduanzi.cn/duanzi/"]
conn = redis.Redis(
host = '127.0.0.1',
port = 6379
) #redis所对应的全局对象
def parse(self, response):
li_list = response.xpath('//*[@id="body"]/div/div/div[1]/ul/li')
for li in li_list:
content = li.xpath('./div/div/div[2]/div[2]/text()').extract_first()
title = li.xpath('./div/div/div[2]/div[1]/h2/a/text()').extract_first()
# print(content,title)
all_data = title + content
m = hashlib.md5() #生成该数据的数据指纹工具
m.update(all_data.encode('utf-8')) #数据编码,把字符串转成二进制数据
data_id = m.hexdigest() #生成数据结构
# print(data_id)
ex = self.conn.sadd('data_id', data_id) #在redis中创建名为data_id的set集合,并将data_id传递到该集合中
if ex ==1:#sadd执行成功(数据指纹在set集合中不存在)
print('已获取最新数据,正在爬取中.....')
item = ZlsdemoproItem() # 实例化ITEM对象
item['title'] = title # 将title传递给item
item['content'] = content # 将content传递给item
yield item #提交item
else:#sadd没有执行成功(数据指纹在set集合中已存储)
print('暂无最新数据更新,请等待数据更新!')
items.py
# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.html
import scrapy
class ZlsdemoproItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
title = scrapy.Field()
content = scrapy.Field()
pipelines.py
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html
# useful for handling different item types with a single interface
from itemadapter import ItemAdapter
class ZlsdemoproPipeline:
def process_item(self, item, spider):
conn = spider.conn #调用爬虫文件中的conn对象
dic = {
'title' : item['title'],
'content' : item['content'],
}
#保证redis版本是2.10.6 pip install redis==2.10.6
# 只有redis版本是2.10.6才能直接把item作为字典写进去
conn.lpush('duanzi',dic)
return item
settings.py
USER_AGENT : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"
ROBOTSTXT_OBEY = False
LOG_LEVEL = 'ERROR'
LOG_LEVEL = 'WARNING'
#释放管道
ITEM_PIPELINES = {
"zlsDemoPro.pipelines.ZlsdemoproPipeline": 300,
}
Day 22 22.1.1:增量式爬虫 - 场景1的实现的更多相关文章
- Scrapy 增量式爬虫
Scrapy 增量式爬虫 https://blog.csdn.net/mygodit/article/details/83931009 https://blog.csdn.net/mygodit/ar ...
- 基于Scrapy框架的增量式爬虫
概述 概念:监测 核心技术:去重 基于 redis 的一个去重 适合使用增量式的网站: 基于深度爬取的 对爬取过的页面url进行一个记录(记录表) 基于非深度爬取的 记录表:爬取过的数据对应的数据指纹 ...
- 增量式爬虫 Scrapy-Rredis 详解及案例
1.创建scrapy项目命令 scrapy startproject myproject 2.在项目中创建一个新的spider文件命令: scrapy genspider mydomain mydom ...
- 爬虫 crawlSpider 分布式 增量式 提高效率
crawlSpider 作用:为了方便提取页面整个链接url,不必使用创参寻找url,通过拉链提取器,将start_urls的全部符合规则的URL地址全部取出 使用:创建文件scrapy startp ...
- python爬虫---CrawlSpider实现的全站数据的爬取,分布式,增量式,所有的反爬机制
CrawlSpider实现的全站数据的爬取 新建一个工程 cd 工程 创建爬虫文件:scrapy genspider -t crawl spiderName www.xxx.com 连接提取器Link ...
- 爬虫07 /scrapy图片爬取、中间件、selenium在scrapy中的应用、CrawlSpider、分布式、增量式
爬虫07 /scrapy图片爬取.中间件.selenium在scrapy中的应用.CrawlSpider.分布式.增量式 目录 爬虫07 /scrapy图片爬取.中间件.selenium在scrapy ...
- 爬虫---scrapy分布式和增量式
分布式 概念: 需要搭建一个分布式的机群, 然后在每一台电脑中执行同一组程序, 让其对某一网站的数据进行联合分布爬取. 原生的scrapy框架不能实现分布式的原因 调度器不能被共享, 管道也不能被共享 ...
- [开源 .NET 跨平台 数据采集 爬虫框架: DotnetSpider] [三] 配置式爬虫
[DotnetSpider 系列目录] 一.初衷与架构设计 二.基本使用 三.配置式爬虫 四.JSON数据解析与配置系统 上一篇介绍的基本的使用方式,虽然自由度很高,但是编写的代码相对还是挺多.于是框 ...
- 增量式PID计算公式4个疑问与理解
一开始见到PID计算公式时总是疑问为什么是那样子?为了理解那几道公式,当时将其未简化前的公式“活生生”地算了一遍,现在想来,这样的演算过程固然有助于理解,但假如一开始就带着对疑问的答案已有一定看法后再 ...
- 增量式PID简单翻板角度控制
1.研究背景 随着电子技术.信息技术和自动控制理论技术的完善与发展,近来微型处理器在控制方面的应用也越来越多.随之逐渐渗透到我们生活的各个领域.如导弹导航装置,飞机上仪表的控制,网络通讯与数据传输,工 ...
随机推荐
- 狂神--Vue
概述 前端三要素 HTML(结构) :超文本标记语言(Hyper Text Markup Language) ,决定网页的结构和内容 CSS(表现) :层叠样式表(Cascading Style sh ...
- vue学习 第二天 CSS基础
CSS: 层叠样式表 ( Cascading Style Sheets ) 的简称 1.css简介 1)也是一种标记语言 2)主要用来设置html页面中,标签的样式. 3)css美化了html页面, ...
- vue2的反向代理
// 在vue.config.js中的配置项配置 devServer: { proxy: { // 当我们的本地的请求 有/api的时候,就会代理我们的请求地址向另外一个服务器发出请求 '/api': ...
- 地理信息技术GIS学习(3):数据表操作、图表制作、地图编辑(上海市行政区划图)
数据表操作.图表制作内容主要来自 张明明的<ArcGis 10.1 超级学习手册>,其博客的电子数据已经找不到. 一.数据表操作 ArcMap中以属性表的形式来组织和管理要素的属性信息.每 ...
- flask-基础篇03 RESTful
一.起步: Flask-RESTful 是用于快速构建REST API 的Flask扩展 1.安装RESTful pip install flask-restful 2.Hello World示例 f ...
- PHP二维数组根据某个元素(key)排序
/** * 二维数组根据key排序 * @param $arr * @param $arr_key * @param string $order 排序规则 * @return mixed */ fun ...
- [2015年NOIP提高组] 跳石头
一年一度的"跳石头"比赛又要开始了! 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起点和终点.在起点和终点之间,有 <spa ...
- Nextcloud报 PHP zip 模块未安装
wget https://pecl.php.net/get/zip自动下载最新包 tar xf zip-1.20.0.tgz cd zip-1.20.0/ phpize 报错system libzip ...
- 【解决】Mac无法通过smb连接到windows的共享文件夹
通过Mac访问windows的共享文件夹也有很多博文都写了,这里不再提. 先按照网上教程,在Windows下允许远程,然后设置文件夹共享出来,再在Mac上通过smb登录,输入用户名和密码窗口总是抖动, ...
- css可继承与不可继承的属性
一.可继承性的属性 字体相关的:font-size/font-family/font-weight/font-style/font-variant/font-stretch 文本相关的:color/t ...