爬虫框架Scrapy 之(六) --- scrapy增量爬虫

增量爬虫

  在scrapy中有很多的爬虫模版,这些模版都是基于basic模版进行的功能扩展(例如:crawl模版、feed模版等)最常用的是crawl(即增量式爬虫)

  basicspider的设计理念是:从start_urls里面取出起始的url,使用start_urls来驱动引擎工作

  增量式爬虫:首先以start_urls中的url为起点,从这些url中不断的请求网页,然后从新的网页中匹配出新的url重新放入调度器的队列进行调度;

        再从新的url网页中提取新的url,在进行调度。依此类推直到所有的url都匹配完成为止

爬虫文件 spilder/dushu.py 增量爬虫介绍

 1 # -*- coding: utf-8 -*-
 2 import scrapy
 3 #  在scrapy中有很多的爬虫模版,这些模版都是基于basic模版进行的功能扩展(例如:crawl模版、feed模版等)最常用的是crawl(即增量式爬虫)
 4 #  basicspider的设计理念是:从start_urls里面取出起始的url,使用start_urls来驱动引擎工作
 5 #  增量式爬虫:首先以start_urls中的url为起点,从这些url中不断的请求网页,然后从新的网页中匹配出新的url重新放入调度器的队列进行调度
 6 #     再从新的url网页中提取新的url,在进行调度。依此类推直到所有的url都匹配完成为止
 7 from scrapy.linkextractors import LinkExtractor
 8 # LinkExtractor用于根据一定的规则,从网页中提取新的url
 9 from scrapy.spiders import CrawlSpider, Rule
10 # CrawlSpider:增量爬虫。 Rule:一个规则对象,根据LinkExtractor匹配的网址发起请求,并且回调函数
11 
12 
13 class BookSpider(CrawlSpider):  # 继承自CrawlSpider
14     name = 'book'
15     allowed_domains = ['dushu.com']
16     start_urls = ['https://www.dushu.com/book/1002.html']
17 
18     # rules规则:包含若干个rule对象,每一个rule对象去匹配并且请求一定的url
19     #   callback: 它的回调函数,字符串格式书写
20     #   LinkExtractor对象的匹配规则:
21     #       allow参数代表:正则规则
22     #       restrict_xpaths参数:通过xpath路径来匹配
23     #       restrict_css参数: 通过css来匹配
24     rules = ( #根据Extractor匹配到的网址,来发起请求。
25         # 正则匹配
26         Rule(LinkExtractor(allow=r'/book/1002_[1-6]\.html'), callback='parse_item', follow=True),
27         # xpath匹配
28         # Rule(LinkExtractor(restrict_xpaths='//div[@class="pages"]/a'), callback='parse_item', follow=True),
29         # css匹配
30         # Rule(LinkExtractor(restrict_css='.pages a'), callback='parse_item', follow=True),
31     )
32 
33     def parse_item(self, response):
34         item = {}
35         #item['domain_id'] = response.xpath('//input[@id="sid"]/@value').get()
36         #item['name'] = response.xpath('//div[@id="name"]').get()
37         #item['description'] = response.xpath('//div[@id="description"]').get()
38         return item

 解析

  • items.py  定义要获取数据的模型
 1 import scrapy
 2 
 3 class DushuproItem(scrapy.Item):
 4     title = scrapy.Field()
 5     author = scrapy.Field()
 6     price = scrapy.Field()
 7     publisher = scrapy.Field()
 8     content = scrapy.Field()
 9     author_info = scrapy.Field()
10     mulu = scrapy.Field()
  • spider/dushu.py  对数据进行解析
 1 # -*- coding: utf-8 -*-
 2 import scrapy
 3 #  在scrapy中有很多的爬虫模版,这些模版都是基于basic模版进行的功能扩展(例如:crawl模版、feed模版等)最常用的是crawl(即增量式爬虫)
 4 #  basicspider的设计理念是:从start_urls里面取出起始的url,使用start_urls来驱动引擎工作
 5 #  增量式爬虫:首先以start_urls中的url为起点,从这些url中不断的请求网页,然后从新的网页中匹配出新的url重新放入调度器的队列进行调度
 6 #       再从新的url网页中提取新的url,在进行调度。依此类推直到所有的url都匹配完成为止
 7 from scrapy.linkextractors import LinkExtractor
 8 # LinkExtractor用于根据一定的规则,从网页中提取新的url
 9 from scrapy.spiders import CrawlSpider, Rule
10 # CrawlSpider :增量爬虫。 Rule :一个规则对象,根据LinkExtractor匹配的网址发起请求,并且回调函数
11 from DushuPro.items import DushuproItem
12 
13 class BookSpider(CrawlSpider):  # 继承自CrawlSpider
14     name = 'book'
15     allowed_domains = ['dushu.com']
16     start_urls = ['https://www.dushu.com/book/1002.html']
17 
18     # rules规则:包含若干个rule对象,每一个rule对象去匹配并且请求一定的url
19     #   callback: 它的回调函数,字符串格式书写
20     #   LinkExtractor对象的匹配规则:
21     #       allow参数代表:正则规则
22     #       restrict_xpaths参数:通过xpath路径来匹配
23     #       restrict_css参数: 通过css来匹配
24     rules = ( #根据Extractor匹配到的网址,来发起请求。
25         # 正则匹配
26         Rule(LinkExtractor(allow=r'/book/1002_[1-6]\.html'), callback='parse_item', follow=True),
27         # xpath匹配
28         # Rule(LinkExtractor(restrict_xpaths='//div[@class="pages"]/a'), callback='parse_item', follow=True),
29         # css匹配
30         # Rule(LinkExtractor(restrict_css='.pages a'), callback='parse_item', follow=True),
31     )
32 
33     # 数据解析函数对爬取的信息进行解析
34     def parse_item(self, response):
35         # 解析一级页面。先找到所有的书籍
36         book_list = response.xpath('//div[@class="bookslist"]/ul/li')
37         for book in book_list:
38             item = DushuproItem()
39             item['title'] = book.xpath('.//h3//text()').extract_first() # 取第一个
40             item['author'] = "".join(book.xpath('.//p[1]//text()').extract()) # 取多个
41             # item 目前未解析完,其他的内容在当前书本二级页面中
42 
43             # 访问二级页面。获取二级页面的链接
44             next_url = "https://www.dushu.com" + book.xpath('.//h3/a/@href').extract_first()
45             # 正式访问二级页面。涉及到翻页,需要重新调度get下载器,对二级页面进行请求
46             yield scrapy.Request(url=next_url,callback=self.parse_info,meta={"item":item})
47             # meta参数:是response响应对象的一个属性,每次下载器下载完一个url以后都会封装一个response对象并且把响应体和响应头等信息传递过来
48             # 其中response中有一个属性叫做meta,它是存储配置信息,现在我们把item作为response的meta信息。在二级函数中接收一下,就可以把item传过去
49 
50     # 解析二级页面,并且把上级页面中的item补充完整
51     def parse_info(self,response):
52         # 如何获取上一级页面的item,需要在yield中加一个item参数,将上一级页面中的item数值传到二级页面
53         # print(response.meta)         # 此时response的meta中就携带上一级页面的item
54         item = response.meta["item"]   # 接收上一级页面的item,在二级页面继续解析
55         item["price"] = response.xpath("//span[@class='num']/text()").extract_first()
56         item["publisher"] = response.xpath("//tr[2]//td[2]/a/text()").extract()[0] if response.xpath(
57             "//tr[2]//td[2]/a/text()").extract() else ""
58         item["content"] = response.xpath("//div[@class='text txtsummary']//text()").extract()[0]
59         item["author_info"] = response.xpath("//div[@class='text txtsummary']//text()").extract()[1]
60         item["mulu"] = response.xpath("//div[contains(@class,'text txtsummary')]")[2].xpath(".//text()").extract()
61 
62         yield item

存储

  • pipelines.py文件中对数据进行存储
1 import redis
2 class DushuproPipeline(object):
3 
4     def open_spider(self,spider):
5         self.rds = redis.StrictRedis(host="www.fanjianbo.com",port=6379,db=3)
6 
7     def process_item(self, item, spider):
8         self.rds.lpush("books",item)
9         return item

 

转载于:https://www.cnblogs.com/TMMM/p/11370982.html

Scrapy爬虫改为Scrapy-Redis增量式爬虫 如何把一个Scrapy项目改造成Scrapy-Redis增量式爬虫 前提: 安装Scrapy-Redis 1.原有的爬虫代码不用改动 2 在setting配置文件中添加如下配置 1. 增加了一个去重容器类的配置, 作用使用Redis的set集合来存储请求的指纹数据, 从而实现请求去重的持久化 DUPEFILTER_CLASS = “scrapy_redis.dupefilter.RFP... 阅读详情

相关推荐

1.网络爬虫概述

一、爬虫是什么? 二、爬虫可以做什么? 三、爬虫开发中有哪些技术?

qq_40407729的博客 5391

scrapy实现增量式爬取

实现爬虫的增量式爬取有两种方法,一是在获得页面解析的内容后判断该内容是否已经被爬取过,二是在发送请求之前判断要被请求的url是否已经被爬取过,前一种方法可以感知每个页面的内容是否发生变化,能获取页面新增或者变化的内容,但是由于要对每个url发送请求,所以速度比较慢,而对网站服务器的压力也比较大,后一种无法获得页面变化的内容,但是因为不用对已经爬取过的url发送请求,所以对服务器压力比较小,速度比较快

qq_35488769的博客 1万+

Python爬虫入门教程 78-100 用Scrapy+BloomFilter再写个增量爬虫

继续搞定增量爬虫,本文涉及两个Python模块,一个为Scrapy,另一个是BloomFilter

梦想橡皮擦,专栏100例写作模式先行者,现象级专栏 《Python 爬虫 100 例》作者、《滚雪球学 Python 专栏》原创者 1万+

使用Scrapy实现网站数据的增量爬取

使用Scrapy实现网站数据的增量爬取

manfanying的博客 1123

深入理解Python网络爬虫与Scrapy框架实战指南

随着大数据时代的到来,网络爬虫技术成为了信息采集的重要手段。Python网络爬虫是利用Python编程语言,通过模拟用户访问网络数据,并从中提取有价值信息的自动化脚本。因其简洁的语法、强大的库支持,Python已成为网络爬虫开发者的首选语言。在开始使用Scrapy之前,首先确保你的开发环境中安装了Python。Scrapy是用Python编写的,它对Python的版本有一定的要求。Scrapy支持Python 3.6及以上版本,因此需要确保系统中安装了对应的Python环境。

weixin_42502040的博客 781

Python-scrapydjango增量抓取天涯莲蓬鬼话全部帖子

scrapy django增量抓取天涯莲蓬鬼话全部帖子,并简单展示,部署至centos

python爬虫Scrapy框架之增量式爬虫

一 增量式爬虫 什么时候使用增量式爬虫: 增量式爬虫:需求 当我们浏览一些网站会发现,某些网站定时的会在原有的基础上更新一些新的数据。如一些电影网站会实时更新最近热门的电影。那么,当我们在爬虫的过程中遇到这些情况时,我们是不是应该定期的更新程序以爬取到更新的新数据?那么,增量式爬虫就可以帮助我们来实现 二 增量式爬虫 概念 通过爬虫程序检测某网站数据更新的情况,这样就能爬取到该网站更新出来的数据 ...

weixin_30455067的博客 921

python 爬虫 实现增量去重和定时爬取实例

今天小编就为大家分享一篇python 爬虫 实现增量去重和定时爬取实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

Python爬虫之scrapy高级(全站爬取,分布式,增量爬虫)

1 scrapy全站爬取 1.1 全站爬取简介 CrawlSpider:全站数据爬虫的方式,它是一个类,属于Spider的子类 如果不使用CrawlSpider,那么就相当于基于spider,手动发送请求,太不方便 基于CrawlSpider可以很方便地进行全站数据爬取 1.2 CrawlSpider 1.2.1 基本讲解 基本步骤: 创建一个工程:scrapy startproject ProjectName 切换到爬虫工程中后,创建爬虫文件:scrapy genspider -t crawl xxx

上善若泪 6299

MIMO技术入门

MIMO:多天线技术,发射端和接收端有多个天线(注意:并不是指多个天线板,而是多套振子,每一套是一个独立的天线。) 4G:2、8天线 5G:4、64天线(64T64R) 手机也是多天线 MIMO实现效果的分类: 1)空间分集 。2)空间复用。3)波束赋形。 空间分集(space diversity) 作用:提升接收质量 利用多个天线发射或者接收一个数据流,避免单个信道衰落对整个链路的影响。(比如你的耳机坏了一只并不影响另一只) 空间复用(space multiplexing) 作用:提升速率 利

About1129的博客 2876

攻防世界GFSJ1184_welcome_CAT_CTF

由于它是 PIE 可执行文件,程序加载地址会随机化,这导致你在 GDB 调试时需要处理地址偏移(如 0x246d 变成 0x55555540246d)。:client 程序通过网络连接(get_nc() 和 get_flag(nc))与 server 通信,server 监听在端口 8888。:client 依赖外部共享库(如 libstdc++.so),因此运行时需要这些库存在系统中。程序就是wasd移动,走到不同标记(* $ @ )下方,输入j回车,会有不同反应。两个文件client和server。

拥抱AI的老粽子 1262

网络爬虫是什么

。网络爬虫能够自动请求网页,并将所需要的数据抓取下来。通过对抓取的数据进行处理,从而提取出有价值的信息。

api_Anzexi的博客 1万+

MATLAB安装

Matlab 2016a 安装包及破解教程百度云分享链接: 链接:https://pan.baidu.com/s/1i6BgD8p       密码:17gg   Matlab安装教程: 1、下载文件,得到R2016a_win64.part1.rar、R2016a_win64.part2.rar两部分安装文件和Matlab 2016a Win64 Crack破解文件。 2、解压安装文件(解...

qq_36734094的博客 17万+

网络爬虫学习

网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。类型:网络爬虫按照系统结构和实现技术,大致可以分为以下几种:通用网络爬虫(General Purpose Web Crawler)、聚焦网络爬虫(Focused Web Crawler)、增量式网络爬虫(Incremental Web Crawler)、深层网络爬虫(Deep Web Crawler)。

2303_77635734的博客 2466

vc mfc listctrl使用虚拟列表 虚拟列表用法

note 虚拟列表可有效加载大量数据 需要处理listctrl的 LVN_GETDISPINFO 消息 使用虚拟列表 不能 使用 insert的方法插入数据,而是告诉listctrl 当前要显示多少行 使用SetItemCount函数告诉listctrl当前显示多少行 使用虚拟列表需要自己维护数据源 使用 添加list ctrl 控件 将其Owner Data 属性 设置为 True 添加...

知其所以然 398

数据增强综述及albumentations代码使用

数据增强综述及albumentations使用基于基本图形处理的数据增强 本文涉及到的资料: 1.A survey on Image Data Augmentation for Deep Learning 2.Albumentations: Fast and Flexible Image Augmentations 3.Code 基于基本图形处理的数据增强 1.翻转;2.旋转;3.仿射变换;4.色彩空间(RGB、YUV、CMY、HSV,在图像情感分析中会影响标签。最简单的方法就是只改变一个通道。对比度、直方

qq_41917697的博客 6680

通过网络爬虫采集大数据

网络数据采集是指通过网络爬虫或网站公开 API 等方式从网站上获取数据信息。该方法可以将非结构化数据从网页中抽取出来,将其存储为统一的本地数据文件,并以结构化的方式存储。它支持图片、音频、视频等文件或附件的采集,附件与正文可以自动关联。 在互联网时代,网络爬虫主要是为搜索引擎提供最全面和最新的数据。 在大数据时代,网络爬虫更是从互联网上采集数据的有利工具。目前已经知道的各种网络爬虫工具已经有上...

程序员生活网 3万+

DRAM内存模拟持久化设备的方法

由于持久化内存介质NVM技术的发展,越来越多的科研工作者投身到NVM相关的研究当中。但由于目前工业界并没有推出广泛使用的NVM介质设备,所以科研工作都需要自己以现有的条件,模拟NVM设备使用场景。一个简单的方法是:通过修改DRAM模拟器,达到模拟NVM的目的(可以参考:DRAMSim2模拟器分析与应用)。更高端的方式是:在真实系统中,将内存划分出一块儿,用来模拟NVM设备(类似于传统的ramdis

酷炫人笨笨熊 1899

scrapy框架之增量式爬虫

scrapy框架之增量式爬虫 一 、增量式爬虫 什么时候使用增量式爬虫: 增量式爬虫:需求 当我们浏览一些网站会发现,某些网站定时的会在原有的基础上更新一些新的数据。如一些电影网站会实时更新最近热门的电影。那么,当我们在爬虫的过程中遇到这些情况时,我们是不是应该定期的更新程序以爬取到更新的新数据?那么,增量式爬虫就可以帮助我们来实现 二 、增量式爬虫 概念: 通过爬虫程序检测某网站数据更新的情况,这样就能爬取到该网站更新出来的数据 如何进行增量式爬取工作: 在发送请求之前判断这个URL之前是不是爬取过 在解

Acheng123的博客 1万+

卫星图像检测,分割,跟踪,超分辨率,数据集调研,以及论文笔记

目标检测,针对物体有很多类如桥,烟囱,罐子等,有静态图像下的检测,也就是图像源头多来自谷歌地图,但是前后帧没有任何联系,并且谷歌地图相对来说比较清楚,难度小一点,也有粗粒度以及较细粒度的检测,然后卫星视频的数据集较少,则可以通过前后帧的联系来辅助检测,并且卫星帧基本上只对车,船,飞机,火车进行检测,没有进行细粒度的检测即将车辆分类为卡车,皮卡,小轿车,但是关船,则可以分类为货船以及军舰,因为目前的卫星视频中小车实在太少了,难以进行更细粒度的检测。luojia 三号卫星。

zhangzhao147的博客 4707

CAN总线数据采集与分析

在CAN总线数据采集中,数据采集是指从CAN网络中获取数据,并将其存储在本地或远程数据库中。数据源:明确数据源,如CAN总线、CANoe/CANalyzer工具等。数据格式:确定数据格式,如CAN消息、信号值、环境变量等。数据存储:选择数据存储方式,如本地文件、数据库、云存储等。在CAN总线数据分析中,数据分析是指对采集到的数据进行处理和分析,以提取有用的信息。数据处理:对采集到的数据进行处理,如滤波、去噪、归一化等。数据分析:对处理后的数据进行分析,如统计分析、趋势分析、故障诊断等。数据可视化。

闲人编程的博客 4044

Python网络爬虫简介与环境配置

Python网络爬虫简介以及环境配置,包括conda环境下载安装、PyCharm编辑器下载安装以及解释器配置,网络爬虫所需库安装,MySQL数据库安装、MongoDB数据库安装。

shield911的博客 6079

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

什么是网络爬虫

网络爬虫(Web Crawler),也被称为网络蜘蛛(Web Spider)或网络机器人(Web Robot),是一种按照一定的规则,自动抓取万维网信息的程序或脚本。它通过模拟人类浏览器的行为,在互联网上遍历网页,提取其中的文本、图片、链接等数据,为后续的数据分析、处理和应用提供原始素材。

zchRain的博客 1509

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Python网络爬虫与数据采集实战——什么是网络爬虫

网络爬虫(Web Crawler),也被称为网络蜘蛛或网络机器人,是一种按照一定规则自动抓取互联网信息的程序。它们通过模拟浏览器访问网页,提取有价值的信息,并将这些信息存储到数据库中或用于进一步处理。爬虫是现代互联网数据获取、搜索引擎索引、信息聚合、数据分析等许多技术和应用的基础。搜索引擎:搜索引擎使用爬虫定期抓取互联网上的网页,建立索引数据库,从而让用户能够通过关键词搜索到相关内容。数据抓取与分析。

好看资源网的博客 2405

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

升级普通Scrapy为增量式爬虫(一)

根据一些业务需求,在爬虫的过程中由于一些网络或者人为的原因终止了爬虫流程,下次发起爬虫请求时,会重新开始,导致原来爬虫过的数据会重复爬取。 为了解决重复爬取,同时也是为了对爬取的数据进行一个筛选,就需要用到增量式爬虫。 增量式爬虫的意义在于,当爬虫流程中断后,下次爬虫请求会紧接着上次中断的地方进行爬取,上次爬取的数据,就不会再发送请求,提高爬虫效率。 增量式爬虫的方法: 第一种: 启用scrapy...

mygodit的博客 4936
上一篇: 爬虫框架Scrapy 之(五) --- scrapy运行原理(中间件)
下一篇: 爬虫框架Scrapy 之(七) --- scrapy代理植入
baoding4359
博客等级 码龄11年 2粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值