概述

概念:监测

核心技术:去重

  • 基于 redis 的一个去重

适合使用增量式的网站:

  • 基于深度爬取的

    • 对爬取过的页面url进行一个记录(记录表)
  • 基于非深度爬取的
    • 记录表:爬取过的数据对应的数据指纹

      • 数据指纹:原始数据的一组唯一标识
      • 数据 –> 数据指纹 –> 库中查询
      • hashlib

所谓的记录表是以怎样的形式存在于哪?

  • redis的set充当记录表

例子

爬取4567电影网中影片名称以及简介,当网站有更新时爬取增加的了数据。

  • 地址为:https://www.4567tv.tv/frim/index1.html
  • 该例为基于深度爬取的。

scrapy startproject zlsPro

scrapy genspider zls www.xxx.com

  • 使用手动传参进行深度的爬取
  • 使用 self.conn.sadd('movie_url', detail_url) 的返回值来判断是否爬取过该电影。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# zls.py
# -*- coding: utf-8 -*-
import scrapy
from zlsPro.items import ZlsproItem
from redis import Redis class ZlsSpider(scrapy.Spider):
name = 'zls'
# allowed_domains = ['www.xxx.com']
start_urls = ['https://www.4567tv.tv/frim/index1.html']
conn = Redis('127.0.0.1', 6379) def parse(self, response):
li_list = response.xpath('/html/body/div[1]/div/div/div/div[2]/ul/li')
for li in li_list:
title = li.xpath('./div/div/h4/a/text()').extract_first()
detail_url = 'https://www.4567tv.tv' + li.xpath('./div/div/h4/a/@href').extract_first()
ret = self.conn.sadd('movie_url', detail_url)
if ret:
# 如果成功写入则该url不存在,可以之后后续操作:
performer = li.xpath('./div/div/p/text()').extract_first()
item = ZlsproItem()
item['title'] = title
item['performer'] = performer
yield scrapy.Request(detail_url, callback=self.parse_detail, meta={'item': item})
else:
print('暂无更新的数据') def parse_detail(self, response):
item = response.meta['item']
content = response.xpath(
'//div[@class="stui-content__detail"]/p/span[@class="detail-content"]/text()').extract_first()
item['content'] = content
yield item

  • 定义Item
1
2
3
4
5
6
7
8
# items.py
import scrapy class ZlsproItem(scrapy.Item):
# define the fields for your item here like:
title = scrapy.Field()
performer = scrapy.Field()
content = scrapy.Field()

  • 定义pipeline
  • 传入redis
1
2
3
4
5
6
7
8
9
10
# pipelines.py
class ZlsproPipeline(object): def process_item(self, item, spider):
title = item['title']
performer = item['performer']
content = item['content']
conn = spider.conn
conn.lpush('movie', item)
return item

基于Scrapy框架的增量式爬虫的更多相关文章

  1. 基于Scrapy框架的Python新闻爬虫

    概述 该项目是基于Scrapy框架的Python新闻爬虫,能够爬取网易,搜狐,凤凰和澎湃网站上的新闻,将标题,内容,评论,时间等内容整理并保存到本地 详细 代码下载:http://www.demoda ...

  2. Scrapy 增量式爬虫

    Scrapy 增量式爬虫 https://blog.csdn.net/mygodit/article/details/83931009 https://blog.csdn.net/mygodit/ar ...

  3. 基于scrapy框架的爬虫

    Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中. scrapy 框架 高性能的网络请求 高性能的数据解析 高性能的 ...

  4. 基于scrapy框架输入关键字爬取有关贴吧帖子

    基于scrapy框架输入关键字爬取有关贴吧帖子 站点分析 首先进入一个贴吧,要想达到输入关键词爬取爬取指定贴吧,必然需要利用搜索引擎 点进看到有四种搜索方式,分别试一次,观察url变化 我们得知: 搜 ...

  5. 使用scrapy框架做赶集网爬虫

    使用scrapy框架做赶集网爬虫 一.安装 首先scrapy的安装之前需要安装这个模块:wheel.lxml.Twisted.pywin32,最后在安装scrapy pip install wheel ...

  6. 爬虫---scrapy分布式和增量式

    分布式 概念: 需要搭建一个分布式的机群, 然后在每一台电脑中执行同一组程序, 让其对某一网站的数据进行联合分布爬取. 原生的scrapy框架不能实现分布式的原因 调度器不能被共享, 管道也不能被共享 ...

  7. 基于scrapy框架的分布式爬虫

    分布式 概念:可以使用多台电脑组件一个分布式机群,让其执行同一组程序,对同一组网络资源进行联合爬取. 原生的scrapy是无法实现分布式 调度器无法被共享 管道无法被共享 基于 scrapy+redi ...

  8. 基于scrapy框架的爬虫基本步骤

    本文以爬取网站 代码的边城 为例 1.安装scrapy框架 详细教程可以查看本站文章 点击跳转 2.新建scrapy项目 生成一个爬虫文件.在指定的目录打开cmd.exe文件,输入代码 scrapy ...

  9. Scrapy框架实战-妹子图爬虫

    Scrapy这个成熟的爬虫框架,用起来之后发现并没有想象中的那么难.即便是在一些小型的项目上,用scrapy甚至比用requests.urllib.urllib2更方便,简单,效率也更高.废话不多说, ...

随机推荐

  1. confluence配置搭建

    1.环境准备:需要安装jdk.需要mysql5.7数据库,创建数据库confluence并创建用户和密码 CREATE DATABASE `confluence` DEFAULT CHARACTER ...

  2. MySQL Workbench 导入导出乱码解决方法

    1.点击导出 2.默认选择cvs 3.打开后发现乱码 4.用记事本的方式打开会发现编码正常 5.文件->另存为,会发现编码为UTF-8,正是MySQL表的编码方式.我们选择编码方式为ANSI,保 ...

  3. 【Android-自定义控件】SwipeRefreshDemo 下拉刷新,上拉加载

    参考:https://github.com/PingerOne/SwipeRefreshDemo 谷歌官方的SwipeRefreshLayout控件,只有下拉刷新功能. 自定义的SwipeRefres ...

  4. Web自动化简介

    在迭代中时,先写出粗略的自动化测试用例,不是非常精准的一些提示,等到项目上线后,提示文案已经确定,再完善用例,使之成为一个完整的自动化测试工程. 用excel管理测试数据,读取效率比较低,需要读取.数 ...

  5. could not load file or assembly "System.Web.Mvc...

    1.一般出现这个错误是因为Web.Config里面的版本号跟project用到的dll版本对应不上 更改webconfig <add assembly="System.Web.Mvc, ...

  6. .NET大文件分片上传

    需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在500M内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以501M来进行限制. 第一步: 前端修改 由于项目使用的是 ...

  7. Comet OJ - Contest #11 B 背包dp

    Code: #include <bits/stdc++.h> #define N 1005 #define M 2000 #define setIO(s) freopen(s". ...

  8. pat 甲级 1045 ( Favorite Color Stripe ) (动态规划 )

    1045 Favorite Color Stripe (30 分) Eva is trying to make her own color stripe out of a given one. She ...

  9. [Cogs] 最大数maxnumber

    http://cogs.pro:8080/cogs/problem/problem.php?pid=1844 Luogu 的数据真zhizhang Cogs AC #include <iostr ...

  10. luogu4281

    P4281 [AHOI2008]紧急集合 / 聚会 题目描述 欢乐岛上有个非常好玩的游戏,叫做“紧急集合”.在岛上分散有N个等待点,有N-1条道路连接着它们,每一条道路都连接某两个等待点,且通过这些道 ...