概述

概念:监测

核心技术:去重

  • 基于 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. 自动化测试环境搭建(appium+selenium+python)

    一.需要安装的软件(根据你所需要的版本安装即可,不一定必须按照小编的版本来) JDK:1.8.0_171 Python:3.7.1 node.js:10.13.0 android-sdk_r24.4. ...

  2. Appium Desired Capabilities-General Capabilities

    Desired Capabilities are keys and values encoded in a JSON object, sent by Appium clients to the ser ...

  3. flyio 的请求封装

    1.安装flyio.js npm install flyio --save-dev 2.在util创建一个fly.js用于封装 import Vue from 'vue' var Fly=requir ...

  4. Java生成压缩文件(zip、rar 格式)

    jar坐标: <dependency> <groupId>org.apache.ant</groupId> <artifactId>ant</ar ...

  5. cookie和Session是啥?

    HTTP是无状态(stateless)协议 http协议是无状态协议即不保存状态. 无状态协议的优点: 由于不需要保存记录,所以减少服务器的CPU和内存的资源的消耗.毕竟客户端一多起来保存记录的话对于 ...

  6. 基于sed 的猫狗游戏

    1.测试文件 [root@L shells]# cat catDog.txt snake snake pig bird dog cat snake pig bird snake cat bird do ...

  7. python中函数的参数传递小结

    “”“ 函数的参数 --必须参数,默认参数,组合参数 --函数我作为参数 --对象作为参数 --*args  可变参数 --**kwargs关键字参数 “”” def function1(a,b,*a ...

  8. Educational Codeforces Round 33 (Rated for Div. 2) C题·(并查集变式)

    C. Rumor Vova promised himself that he would never play computer games... But recently Firestorm — a ...

  9. 在Idea中 的terminal 使用 git

    参考该博客内容 http://blog.csdn.net/qq_28867949/article/details/73012300

  10. codeforces865C

    Gotta Go Fast CodeForces - 865C You're trying to set the record on your favorite video game. The gam ...