概述

概念:监测

核心技术:去重

  • 基于 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. Bootstrap-轮播图-No.6

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  2. Bootstrap-轮播图-No.1

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  3. Redis:Linux环境部署Redis(1)

    简介 1.介绍 Redis是开源的(BSD许可)内存数据结构存储,用作数据库,缓存和消息代理.它支持数据结构,例如 字符串,哈希,列表,集合,带范围查询的排序集合,位图,超日志,带有半径查询的流空间索 ...

  4. 开源笔记软件Joplin

    Joplin is a free, open source note taking and to-do application, which can handle a large number of ...

  5. Codeforces Round #402 (Div. 2) D题 【字符串二分答案+暴力】

    D. String Game Little Nastya has a hobby, she likes to remove some letters from word, to obtain anot ...

  6. Could not load file or assembly "\win32_x86\dotnet1\crdb_adoplus.dll' or one of its dependencies.

     Could not load file or assembly 'file:///C:\Program Files (x86)\SAP BusinessObjects\Crystal Repor ...

  7. c语言if-else的效率比较

    闲着没事测试下if-else的执行效率 测试环境:Mac pro i7 2.3Ghz ...编译器gcc 4.9,代码没有进行优化-O0: 测试代码:c代码1: int main(){ int n=1 ...

  8. 五一培训 清北学堂 DAY4

    今天上午是钟皓曦老师的讲授,下午是吴耀轩老师出的题给我们NOIP模拟考了一下下(悲催暴零) 今天的内容——数论 话说我们可能真的是交了冤枉钱了,和上次清明培训的时候的课件及内容一样(哭. 整除性 质数 ...

  9. 图文并茂VLAN详解,让你看一遍就理解VLAN

    一.为什么需要VLAN 1.1.什么是VLAN? VLAN(Virtual LAN),翻译成中文是“虚拟局域网”.LAN可以是由少数几台家用计算机构成的网络,也可以是数以百计的计算机构成的企业网络.V ...

  10. Apache反向代理解析二级目录/泛目录教程/apache反向代理/apache泛目录反向代理

    同nginx一样,apache解析目录不需要安装任何东西,在配置文件里加入解析规则即可.解析规则: <IfModule mod_proxy.c> ProxyPreserveHost On ...