elasticsearch简单集成到scrapy中

使用elasticsearch的python接口处理数据

 https://github.com/elastic/elasticsearch-dsl-py 

elasticsearch-dsl-py官方使用文档

 http://elasticsearch-dsl.readthedocs.io/en/latest/ 

创建一个DocType类,类似于item类

# 以获取jobbole网站的文章为例from datetime import datetime
from elasticsearch_dsl import DocType, Date, Nested, Boolean, \analyzer, InnerObjectWrapper, Completion, Keyword, Text, Integerfrom elasticsearch_dsl.connections import connections
connections.create_connection(hosts=["localhost"])  # 允许连接至多台服务器class ArticleType(DocType):#伯乐在线文章类型title = Text(analyzer="ik_max_word")create_date = Date()url = Keyword()url_object_id = Keyword()front_image_url = Keyword()front_image_path = Keyword()praise_nums = Integer()comment_nums = Integer()fav_nums = Integer()tags = Text(analyzer="ik_max_word")content = Text(analyzer="ik_max_word")class Meta:index = "jobbole"doc_type = "article"if __name__ == "__main__":ArticleType.init()  # init方法会根据类定义直接生成mapping

创建一个items类,接收数据

class JobBoleArticleItem(scrapy.Item):title = scrapy.Field()create_date = scrapy.Field(input_processor=MapCompose(date_convert),)url = scrapy.Field()url_object_id = scrapy.Field()front_image_url = scrapy.Field(output_processor=MapCompose(return_value))front_image_path = scrapy.Field()praise_nums = scrapy.Field(input_processor=MapCompose(get_nums))comment_nums = scrapy.Field(input_processor=MapCompose(get_nums))fav_nums = scrapy.Field(input_processor=MapCompose(get_nums))tags = scrapy.Field(input_processor=MapCompose(remove_comment_tags),output_processor=Join(","))content = scrapy.Field()def get_insert_sql(self):insert_sql = """insert into jobbole_article(title, url, create_date, fav_nums)VALUES (%s, %s, %s, %s) ON DUPLICATE KEY UPDATE content=VALUES(fav_nums)"""params = (self["title"], self["url"], self["create_date"], self["fav_nums"])return insert_sql, paramsdef save_to_es(self):article = ArticleType()article.title = self['title']article.create_date = self["create_date"]article.content = remove_tags(self["content"])article.front_image_url = self["front_image_url"]if "front_image_path" in self:article.front_image_path = self["front_image_path"]article.praise_nums = self["praise_nums"]article.fav_nums = self["fav_nums"]article.comment_nums = self["comment_nums"]article.url = self["url"]article.tags = self["tags"]article.meta.id = self["url_object_id"]article.save()return

创建一个pipeline类,处理elasticsearch数据写入

from models.es_types import ArticleTypeclass ElasticsearchPipeline(object):def process_item(self, item, spider):item.save_to_es()return item 

配置settings

ITEM_PIPELINES = {'ArticleSpider.pipelines.ElasticsearchPipeline': 1
} 

转载于:https://www.cnblogs.com/cq146637/p/9090697.html

Scrapy学习-24-集成elasticsearch相关推荐

  1. Python分布式爬虫打造搜索引擎完整版-基于Scrapy、Redis、elasticsearch和django打造一个完整的搜索引擎网站

    Python分布式爬虫打造搜索引擎 基于Scrapy.Redis.elasticsearch和django打造一个完整的搜索引擎网站 https://github.com/mtianyan/Artic ...

  2. 第 4-8 课:Spring Boot 集成 ElasticSearch

    ElasticSearch 是⼀个开源的搜索引擎,建⽴在⼀个全⽂搜索引擎库 Apache Lucene™ 基础之上. Lucene 可以说是当下最先进.⾼性能.全功能的搜索引擎库--⽆论是开源还是私有 ...

  3. 【Spring Boot】21.集成elasticsearch

    2019独角兽企业重金招聘Python工程师标准>>> 简介 目前对于检索功能比较有名的服务是我们常见的elasticsearch,所以我们这一节的重点,也是针对elasticsea ...

  4. 【SpringBoot笔记26】SpringBoot框架集成ElasticSearch数据库

    这篇文章,主要介绍SpringBoot框架如何集成ElasticSearch数据库. 目录 一.SpringBoot集成ES 1.1.ElasticSearch介绍 1.2.引入ES依赖 1.3.实例 ...

  5. Spring Boot 集成 ElasticSearch,实现高性能搜索

    1.ElasticSearch介绍 Elasticsearch 是java开发的,基于 Lucene 的搜索引擎.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful Web接口.Elast ...

  6. 深度学习框架集成平台C++ Guide指南

    深度学习框架集成平台C++ Guide指南 这个指南详细地介绍了神经网络C++的API,并介绍了许多不同的方法来处理模型. 提示 所有框架运行时接口都是相同的,因此本指南适用于所有受支持框架(包括Te ...

  7. Spark 2.4重磅发布:优化深度学习框架集成,提供更灵活的流式接收器

    Apache Spark 2.4.0是2.x系列中的第五个版本.此版本增加了屏障执行模式,以便更好地与深度学习框架集成:引入30多个更高阶的内置函数,能够更轻松地处理复杂数据类型:优化K8s集成,同时 ...

  8. 【深度学习】解析深度学习的集成方法

    [深度学习]解析深度学习的集成方法 文章目录 1 前言 2 使用集成模型降低方差 3 如何集成神经网络模型3.1 Varying Training Data3.2 Varying Combinatio ...

  9. Python爬虫框架Scrapy 学习笔记 6 ------- 基本命令

    1. 有些scrapy命令,只有在scrapy project根目录下才available,比如crawl命令 2 . scrapy genspider taobao http://detail.tm ...

最新文章

  1. 如何将 CentOS迁移到 AlmaLinux?
  2. python安装包为什么这么小-python为什么要安装到c盘
  3. Android开发之EditText监听软键盘清除(输入是否清除)
  4. css3高级和低级样式属性先后顺序
  5. .net core grpc 实现通信(一)
  6. python分支语句_Python中分支语句与循环语句实例详解
  7. 手把手教你用itchat统计好友信息,了解一下?
  8. VSTO学习笔记(四)从SharePoint 2010中下载文件
  9. mybatis的详解
  10. 2021年NBA附加赛第一轮预测
  11. Elasticsearch 架构原理—— 新数据写入过程
  12. eclipse中将java项目变成web项目
  13. C++开源日志库选择
  14. WinForm(二) WinForm进阶与复杂控件使用
  15. 数字滤波器原理及应用 借助matlab,数字滤波器原理及应用(借助MATLAB)
  16. java调用js中的方法样例
  17. 什么是Debian?
  18. mcake蛋糕预订图片
  19. 老男孩读PCIe之四:TLP类型
  20. SQL语句获取各种时间的方法

热门文章

  1. 解决@vue/cli 创建项目是安装chromedriver时失败的问题
  2. Python3之Django Web框架中间件???
  3. Gift for GS5
  4. 深入理解JavaScript的闭包特性如何给循环中的对象添加事件
  5. GNU make manual 翻译( 一百五十九)
  6. spring实例化bean的方式
  7. sql中的indexof,函数介绍
  8. Zabbix Server安装
  9. 不擅演讲的马化腾在 08 年讲了什么?
  10. hadoop 配置文件简析