先建立es的mapping,也就是建立在es中建立一个空的Index,代码如下:执行后就会在es建lagou 这个index。

 
 

from datetime import datetime

from elasticsearch_dsl import DocType, Date, Nested, Boolean, \

analyzer, InnerDoc, Completion, Keyword, Text, Integer

from elasticsearch_dsl.connections import connections

 
 

connections.create_connection(hosts=["localhost"])

 
 

 
 

class LagouType(DocType):

# url_object_id = Keyword()

url = Keyword()

title = Text(analyzer="ik_max_word")

salary = Keyword()

job_city = Keyword()

work_years = Text(analyzer="ik_max_word")

degree_need = Keyword()

job_type = Text(analyzer="ik_max_word")

publish_time = Date()

tags = Text(analyzer="ik_max_word")

job_advantage = Text(analyzer="ik_max_word")

job_desc = Text(analyzer="ik_max_word")

job_addr = Text(analyzer="ik_max_word")

company_url = Keyword()

company_name = Text(analyzer="ik_max_word")

crawl_time = Date()

 
 

# min_salary = Integer()

# max_salary = Integer()

 
 

class Meta:

index = 'lagou'

doc_type = "jobs"

 
 

 
 

if __name__ == "__main__":

LagouType.init()

 
 

接着在items 中定义到保存到es的代码,代码如下:

 
 

from
lagou.models.es_type
import
LagouType

class LagouJobItem(scrapy.Item):

 
 

url_object_id = scrapy.Field()

url = scrapy.Field()

title= scrapy.Field()

salary= scrapy.Field()

job_city= scrapy.Field()

work_years= scrapy.Field()

degree_need= scrapy.Field()

job_type= scrapy.Field()

publish_time = scrapy.Field()

tags= scrapy.Field()

job_advantage= scrapy.Field()

job_desc= scrapy.Field()

job_addr= scrapy.Field()

company_url = scrapy.Field()

company_name= scrapy.Field()

crawl_time= scrapy.Field()

min_salary=scrapy.Field()

max_salary= scrapy.Field()

 
 

def save_to_es(self):

lagou_type=LagouType()

lagou_type.url=self["url"]

lagou_type.title=self["title"]

lagou_type.salary=self["salary"]

lagou_type.job_city=self["job_city"]

lagou_type.work_years=self["work_years"]

lagou_type.degree_need=self['degree_need']

lagou_type.job_type=self['job_type']

lagou_type.publish_time=self['publish_time']

lagou_type.tags=self['tags']

lagou_type.job_advantage=self['job_advantage']

lagou_type.job_desc=self['job_desc']

lagou_type.job_addr=self['job_addr']

lagou_type.company_url=self['company_url']

lagou_type.company_name=self['company_name']

lagou_type.crawl_time=self['crawl_time']

lagou_type.meta.id=self['url_object_id']

 
 

lagou_type.save()

 
 

return

 
 

接下来就是在piplines文件中定义保存到es的pipline

 
 

class ElasticsearchPipline(object):

def process_item(self, item, spider):

item.save_to_es()

return item

 
 

之后就是到settings中进行设置。把这个pipline加入到item_pipline中

这样就可以将爬取到的数据保存到es中

 
 

详细说明:

elasticsearch官方也提供了一个python操作elasticsearch(搜索引擎)的接口包,就像sqlalchemy操作数据库一样的ORM框,这样我们操作elasticsearch就不用写命令了,用elasticsearch-dsl-py这个模块来操作,也就是用python的方式操作一个类即可

 
 

elasticsearch-dsl-py下载

下载地址:https://github.com/elastic/elasticsearch-dsl-py

文档说明:http://elasticsearch-dsl.readthedocs.io/en/latest/

首先安装好elasticsearch-dsl-py模块

 
 

、elasticsearch-dsl模块使用说明

create_connection(hosts=['127.0.0.1']):连接elasticsearch(搜索引擎)服务器方法,可以连接多台服务器

class Meta:设置索引名称和表名称

索引类名称.init(): 生成索引和表以及字段

实例化索引类.save():将数据写入elasticsearch(搜索引擎)

from elasticsearch_dsl.connections import connections # 导入连接elasticsearch(搜索引擎)服务器方法
connections.create_connection(hosts=['127.0.0.1']) #连接到本地

class lagouType(DocType): # 自定义一个类来继承DocType类
# Text类型需要分词,所以需要知道中文分词器,ik_max_wordwei为中文分词器
title = Text(analyzer="ik_max_word") # 设置,字段名称=字段类型,Text为字符串类型并且可以分词建立倒排索引
description = Text(analyzer="ik_max_word")
keywords = Text(analyzer="ik_max_word")
url = Keyword() # 设置,字段名称=字段类型,Keyword为普通字符串类型,不分词
riqi = Date() # 设置,字段名称=字段类型,Date日期类型

class Meta: # Meta是固定写法
index = "lagou" # 设置索引名称(相当于数据库名称)
doc_type = 'jobs' # 设置表名称

if __name__ == "__main__": # 判断在本代码文件执行才执行里面的方法,其他页面调用的则不执行里面的方法
lagouType.init() # 生成elasticsearch(搜索引擎)的索引,表,字段等信息

 
 

1.scrapy爬取的数据保存到es中的更多相关文章

  1. 将爬取的数据保存到mysql中

    为了把数据保存到mysql费了很多周折,早上再来折腾,终于折腾好了 安装数据库 1.pip install pymysql(根据版本来装) 2.创建数据 打开终端 键入mysql -u root -p ...

  2. 使用scrapy爬取的数据保存到CSV文件中,不使用命令

    pipelines.py文件中 import codecs import csv # 保存到CSV文件中 class CsvPipeline(object): def __init__(self): ...

  3. 顺企网 爬取16W数据保存到Mongodb

    import requests from bs4 import BeautifulSoup import pymongo from multiprocessing.dummy import Pool ...

  4. 使用logstash拉取MySQL数据存储到es中的再次操作

    使用情况说明: 已经使用logstash拉取MySQL数据存储到es中,es中也创建了相应的索引,也存储了数据.假若把这个索引给删除了,再次进行同步操作的话要咋做,从最开始的数据进行同步,而不是新增的 ...

  5. scrapy爬取海量数据并保存在MongoDB和MySQL数据库中

    前言 一般我们都会将数据爬取下来保存在临时文件或者控制台直接输出,但对于超大规模数据的快速读写,高并发场景的访问,用数据库管理无疑是不二之选.首先简单描述一下MySQL和MongoDB的区别:MySQ ...

  6. c# 抓取和解析网页,并将table数据保存到datatable中(其他格式也可以,自己去修改)

    使用HtmlAgilityPack 基础请参考这篇博客:https://www.cnblogs.com/fishyues/p/10232822.html 下面是根据抓取的页面string 来解析并保存 ...

  7. Excel文件数据保存到SQL中

    1.获取DataTable /// <summary> /// 查询Excel文件中的数据 /// </summary> /// <param name="st ...

  8. Redis使用场景一,查询出的数据保存到Redis中,下次查询的时候直接从Redis中拿到数据。不用和数据库进行交互。

    maven使用: <!--redis jar包--> <dependency> <groupId>redis.clients</groupId> < ...

  9. python爬取数据保存到Excel中

    # -*- conding:utf-8 -*- # 1.两页的内容 # 2.抓取每页title和URL # 3.根据title创建文件,发送URL请求,提取数据 import requests fro ...

随机推荐

  1. hdu5371 最长回文子串变形(Manacher算法)

    pid=5371">http://acm.hdu.edu.cn/showproblem.php? pid=5371 Problem Description Hotaru Ichijou ...

  2. UIActionSheet 提示框

    UIActionSheet是iOS开发中实现警告框的重要的类,在非常多情况下都要用到: UIActionSheet * sheet = [[UIActionSheet alloc] initWithT ...

  3. P4700 算

    P4700 算 时间: 1000ms / 空间: 125829120KiB / Java类名: Main 背景 zhx和他的妹子出去玩. 描述

  4. luogu2679 子串

    题目大意 有两个仅包含小写英文字母的字符串 A 和 B.现在要从字符串 A 中取出 k 个互不重叠的非空子串,然后把这 k 个子串按照其在字符串 A 中出现的顺序依次连接起来得到一 个新的字符串,请问 ...

  5. oc76--NSMutableDictionary

    // // main.m // NSMutableDictionary // NSDictionary不可变,初始化后就不可以修改,NSMutableDictionary可变,初始化后可以改变. // ...

  6. LuoguP4246 [SHOI2008]堵塞的交通

    https://zybuluo.com/ysner/note/1125078 题面 给一个网格,每次把相邻两点连通性改为\(1\)或\(0\),询问两点是否联通. 解析 线段树神题... 码量巨大,细 ...

  7. IDEA 中Spark SQL通过JDBC连接mysql数据库

    一.IDEA装驱动: 1.下载一个MySQL的JDBC驱动:mysql-connector-java-5.1.44.tar.gz2.在idea Open Moudle Settings 在 Moudl ...

  8. Kubernetes 集群中使用 Helm 搭建 Spinnaker

    在我们部署Spinnaker之前,我们需要一个YAML格式的配置文件,它会包含了一些配置信息.可以从Spinnaker Helm Chart repository[2]获得这个文件. $curl -L ...

  9. E20170709-hm

    scrape   vt. 擦,刮; 擦去; 擦伤,刮破; 挖空;

  10. IOS上微信在输入框弹出键盘后,页面不恢复,下方有留白,有弹窗弹出时页面内容感应区域错位

    问题说明: ios中,键盘的弹起,页面会往上挪动,使输入框展示在页面中间,键盘隐藏页面会下挪恢复原状. 在微信移动端,ios页面不恢复,下方有留白. 收起键盘的瞬间,如果有弹窗弹出,此时时页面内容应区 ...