.基于pipline实现url持久化
Posted traditional
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.基于pipline实现url持久化相关的知识,希望对你有一定的参考价值。
items:
# -*- coding: utf-8 -*- # Define here the models for your scraped items # # See documentation in: # https://doc.scrapy.org/en/latest/topics/items.html import scrapy # 定义相应的字段,想爬取什么类容,就定义什么字段 class ChoutiItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() title = scrapy.Field() href = scrapy.Field()
主程序:
# -*- coding: utf-8 -*- import scrapy from scrapy.http import Request class GetChoutiSpider(scrapy.Spider): name = ‘get_chouti‘ allowed_domains = [‘chouti.com‘] start_urls = [‘https://dig.chouti.com/‘] # 当递归查找时,会反复执行parse,因此md5_urls不能定义在parse函数里面 md5_urls = set() def parse(self, response): # 找到对应的标签对象列表 res1 = response.xpath(‘//div[@id="content-list"]/div[@class="item"]‘) for obj in res1: title = obj.xpath(‘.//a[@class="show-content"]/text()‘).extract_first().strip() href = obj.xpath(‘.//a[@class="show-content"]/@href‘).extract_first().strip() # 将item下的一个类导入进来,并实例化一个对象 # 这个类里面,定义了title = scrapy.Field(),href = scrapy.Field() # 将对应的参数传进去,将数据格式化 from ..items import ChoutiItem item_obj = ChoutiItem(title=title, href=href) # 然后yield item_obj,就会自动地将yield的item对象item_obj传给pipline,对格式化的数据进行操作,可以打印也可以保存到数据库 yield item_obj # 以下步骤不变,还是不断yield,将新产生的url添加到调度器里面 res2 = response.xpath(‘//div[@id="dig_lcpage"]//a/@href‘).extract() for url in res2: md5_url = self.md5(url) if md5_url in self.md5_urls: pass else: self.md5_urls.add(md5_url) # 将新的要访问的url放到调度器 url = "https://dig.chouti.com%s" % url yield Request(url=url, callback=self.parse) def md5(self, url): import hashlib m = hashlib.md5() m.update(bytes(url, encoding="utf-8")) return m.hexdigest()
pipline:
# -*- 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 class ChoutiPipeline(object): # 这个item里面封装了title和href,spider则是对应的爬虫 def process_item(self, item, spider): print(item) print("-------") ‘‘‘ {‘href‘: ‘https://mp.weixin.qq.com/s/6nvKz0UYKHzWQdeIO-yf5g‘, ‘title‘: ‘在隔壁的中国,那些孩子已经长大了‘} ------- {‘href‘: ‘https://36kr.com/p/5141314.html?ktm_source=feed‘, ‘title‘: ‘饿了么一夏投入数十亿元升级本地生活服务,直面竞争掀起战端‘} ------- {‘href‘: ‘https://voice.hupu.com/soccer/2318889.html‘, ‘title‘: ‘内马尔建功菲尔米诺终场前破门,巴西2-0墨西哥晋级八强‘} ------- {‘href‘: ‘https://weibo.com/5533018793/Go6oYAWP7‘, ‘title‘: ‘昨天狗哥和网友们聊天,他发明了一套理论,我觉得挺有道理的。以前有人说找对象,就要跟ta去吃顿饭,看看ta对服务员的态度。现在网络时代,找对象,应 该看看ta的tb好评率。‘} ------- {‘href‘: ‘http://dig.chouti.com/pic/show?nid=4f28d09c7543cf48bde49f75095e76af&lid=20576241‘, ‘title‘: ‘今晚的世界杯除了巴西和墨西哥的比赛外还有比利时与日本队的比赛。此前日本队虽然小组出线,但是之后的比赛面临的形势也十分严峻,所以这几天日本网友 们就用自己熟悉的游戏、动漫等元素做了一系列图片来说明日本队所处的形势...... ‘ ‘u200b(@游研社)‘} .......................... .......................... .......................... .......................... .......................... .......................... .......................... ------- {‘href‘: ‘http://dig.chouti.com/pic/show?nid=d745fe433667e775a3ba963d8184f2ba&lid=20575476‘, ‘title‘: ‘被货物压垮 低估了重量...‘} ------- {‘href‘: ‘http://tech.qq.com/a/20180702/040026.htm‘, ‘title‘: ‘上海首批柔性手机屏量产:打破国外技术垄断明年投入试生产‘} ------- {‘href‘: ‘https://www.thepaper.cn/newsDetail_forward_2234647‘, ‘title‘: ‘【成都遭遇强降雨,全城启动“看海模式”】7月2日,四川成都普降暴雨,多处出现大面积积水。据统计,公安、消防、乡镇等部门目前已投入救灾队伍730人, 转移被困群众1200人。‘} ------- {‘href‘: ‘https://mp.weixin.qq.com/s/5P_OZ_uVlYkGE7WZDzEnTw‘, ‘title‘: ‘【英国内阁举行女王驾崩演习:女王驾崩暗号伦敦桥】6月28日,英国多位内阁大臣秘密在政府办公大楼内举行了英“女王驾崩彩排”。消息人士透露,这是英国 内阁大臣首次参加这类演习,而且演习规模“前所未有”。‘} ------- {‘href‘: ‘https://wallstreetcn.com/articles/3350650‘, ‘title‘: ‘【上海市发文规范企业购买商品住房】自7月3日起,企业购买商品住房必须同时满足设立年限已满5年、在本市累计缴纳税款金额已达100万人民币、职工人数10 名及以上且按照规定在该企业缴纳社保和公积金满5年等条件。同时,企业购买的商品住房再次上市交易年限从“满3年”提高至“满5年”。‘} ------- {‘href‘: ‘https://www.huxiu.com/article/250629.html?f=chouti‘, ‘title‘: ‘“ofo看看”上线:车都扫不开,还有心思刷新闻?‘} ------- {‘href‘: ‘https://mp.weixin.qq.com/s/gxb6Nq0OK8WWMQaKt57ubA‘, ‘title‘: ‘【统计数字撒谎了吗?】2018年1-5月规模以上企业利润为27298亿元,少于去年同期的29047亿元,增速应该是-6%。为何同时官方公布增速为16.5%?‘} ------- {‘href‘: ‘http://dig.chouti.com/pic/show?nid=15d537e9e8dc92bbcf8d09d92b6404f4&lid=20574686‘, ‘title‘: ‘淘汰赛第二日结果与第三日展望(tw:千田純生u200f @chidajunsei3163)‘} ------- {‘href‘: ‘http://www.pearvideo.com/video_1379116‘, ‘title‘: ‘上周五,一对新人在美国新泽西的特朗普国际高尔夫俱乐部举办婚礼,碰到了一位超级有名气的惊喜嘉宾:美国总统特朗普。群众们的反应可以说非常热情了…‘ } ------- ------- {‘href‘: ‘https://www.jiemian.com/article/2040108.html‘, ‘title‘: ‘【花4万保你直通名企?“付费内推”背后的生意和争议】除非你牛到全场发光,或者有的是时间耗,最好先争取当个人民币玩家,多拿点装备和秘籍,甚至解锁 些隐藏通关捷径。‘} ------- {‘href‘: ‘https://www.jianshu.com/p/7facfff561fd‘, ‘title‘: ‘【95后的马路Disco:彩灯里的快递小哥】第一次遇到,还未见其人,就听到音响外放的抖音、快手热门歌曲DJ版,远在几十米外可闻;快递车驶到跟前,可见驾 驶位顶上装置旋转射灯,向车上和地面打出一片彩色的移动光点。‘} ------- {‘href‘: ‘http://www.guancha.cn/society/2018_06_30_462139.shtml‘, ‘title‘: ‘【辽宁:老年人口占比22.65%,已步入深度老龄化社会】截至2017年末,辽宁省户籍总人口为4232.57万人,60周岁及以上户籍老年人口958.74万人、占总人口的 22.65%,辽宁省已经步入了深度老龄化社会。‘} ‘‘‘
一定要在settings里面,将该注释取消,否则无法传给pipline
我们也可以定义多个pipline,分别负责打印,写入文件,写入数据库等等,后面的数字表示权重,越大越先被执行
以上是关于.基于pipline实现url持久化的主要内容,如果未能解决你的问题,请参考以下文章
SpringCloud系列十一:SpringCloudStream(SpringCloudStream 简介创建消息生产者创建消息消费者自定义消息通道分组与持久化设置 RoutingKey)(代码片段