ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

增量式爬虫案例

2021-05-16 18:02:26  阅读:163  来源: 互联网

标签:name item url self 爬虫 li 案例 增量 import


一、增量式爬虫:检测网站数据更新情况,只爬取网站最近更新出来的数据。

     核心思路:将爬取过的详情url存储到redis的set集合。

爬虫文件:

# -- coding: utf-8 --

import scrapy

from scrapy.linkextractors import LinkExtractor

from scrapy.spiders import CrawlSpider, Rule

from redis import Redis

from incrementPro.items import IncrementproItem

class MovieSpider(CrawlSpider):

​ name = 'movie'

​ # allowed_domains = ['www.xxx.com']

​ start_urls = ['http://www.4567tv.tv/frim/index7-11.html']

​ rules = (

​ Rule(LinkExtractor(allow=r'/frim/index7-\d+.html'), callback='parse_item', follow=True),

​ )

​ #创建redis链接对象

​ conn = Redis(host='127.0.0.1',port=6379)

​ def parse_item(self, response):

​ li_list = response.xpath('//li[@class="p1 m1"]')

​ for li in li_list:

​ #获取详情页的url

​ detail_url = 'http://www.4567tv.tv'+li.xpath('./a/@href').extract_first()

​ #将详情页的url存入redis的set中

​ ex = self.conn.sadd('urls',detail_url)

​ if ex == 1:

​ print('该url没有被爬取过,可以进行数据的爬取')

​ yield scrapy.Request(url=detail_url,callback=self.parst_detail)

​ else:

​ print('数据还没有更新,暂无新数据可爬取!')

​ #解析详情页中的电影名称和类型,进行持久化存储

​ def parst_detail(self,response):

​ item = IncrementproItem()

​ item['name'] = response.xpath('//dt[@class="name"]/text()').extract_first()

​ item['kind'] = response.xpath('//div[@class="ct-c"]/dl/dt[4]//text()').extract()

​ item['kind'] = ''.join(item['kind'])

​ yield item

管道文件:

# -- coding: utf-8 --

# Define your item pipelines here

#

# Don't forget to add your pipeline to the ITEM_PIPELINES setting

# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html

from redis import Redis

class IncrementproPipeline(object):

​ conn = None

​ def open_spider(self,spider):

​ self.conn = Redis(host='127.0.0.1',port=6379)

​ def process_item(self, item, spider):

​ dic = {

​ 'name':item['name'],

​ 'kind':item['kind']

​ }

​ print(dic)

​ self.conn.lpush('movieData',dic)

​ return item

标签:name,item,url,self,爬虫,li,案例,增量,import
来源: https://www.cnblogs.com/ajiling/p/14774363.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有