您的位置 首页 > 数码极客

网站经常更新新内容怎么爬取?Python爬虫:scrapy框架增量式爬虫

概念

检测网络数据更新的情况,以便于爬取到最新更新出来的数据

实现核心

去重

实战中去重的方式:

记录表

记录表需要记录什么?记录的一定是爬取过的相关信息。

例如某电影网:

  • 爬取过的相关信息:每一部电影详情页的url
  • 只需要使用某一组数据,该组数据如果可以作为该部电影的唯一标识即可,刚好电影详情页的url就可以作为电影的唯一标识。

只要可以标识电影唯一标识的数据我们就可以统称为数据指纹。

去重的方式对应的记录表:

  • Python中的set集合(不可以)

set集合无法持久化存储

  • redis中的set可以的

可以持久化存储


代码案例:

zls.py

import scrapy from import LinkExtractor from import CrawlSpider, Rule from redis import Redis from zl import ZlsproItem class ZlsSpider(CrawlSpider): name = 'zls' # allowed_domains = ['www.xxx.com'] start_urls = [';] coon = Redis(host='127.0.0.1', port=6379) rules = ( Rule(LinkExtractor(allow=r'frim/index1-\d+\.html'), callback='parse_item', follow=False), ) def parse_item(self, response): li_list = re('/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 = '; + li.xpath('./div/div/h4/a/@href').extract_first() ex = ('movie_urls', detail_url) # ex==1插入成功,ex==0插入失败 if ex == 1: # detail_url表示的电影没有存在于记录表中 # 爬取电影数据:发起请求 print('有新数据更新,正在爬取新数据....') item = ZlsproItem() item['title'] = title yield (url=detail_url, callback=, meta={'item': item}) else: # 存在于记录表中 print('暂无数据更新!') def parse_detail(self, response): # 解析电影简介 desc = re('/html/body/div[1]/div/div/div/div[2]/p[5]/span[2]/text()').extract_first() item = re['item'] item['desc'] = desc yield item

class ZlsproPipeline: def process_item(self, item, spider): coon= #redis的连接对象 coon.lpush('movieDate',item) return item

i

import scrapy class ZlsproItem): # define the fields for your item here like: # name = () title = () desc = ()

数据指纹一般是经过加密的

上述案例的数据指纹没有必要加密。

什么情况数据指纹需要加密?

  • 如果数据的唯一标识标识的内容数据量比较大,可以使用hash将数据加密成32位密文。
  • 目的是为了节省空间。

关注Python涛哥!学习更多Python知识!

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“4567电影网”边界阅读