这个项目是大四上学期实习的一个项目。因为我正好也在学Scrapy,所以就以这个作为项目。也可能作为我的毕业设计。
github地址:https://github.com/tianmingbo/scrapy-elastic
一、elasticsearch使用
https://blog.csdn.net/T_I_A_N_/article/details/103253975
elastic教程:https://www.elastic.co/guide/cn/elasticsearch/guide/current/getting-started.html
二、建立索引
等同于MySql中的数据库
from elasticsearch_dsl import DocType, Date, Completion, Keyword, Text, Integer
from elasticsearch_dsl.analysis import CustomAnalyzer as _CustomAnalyzer
from elasticsearch_dsl.connections import connections
connections.create_connection(hosts=["localhost"]) # 连接服务器
class CustomAnalyzer(_CustomAnalyzer):
def get_analysis_definition(self):
# 避免报错
return {}
ik_analyzer = CustomAnalyzer("ik_max_word", filter=["lowercase"])
class JobType(DocType):
'''
Text:
会分词,然后进行索引
支持模糊、精确查询
不支持聚合
keyword:
不进行分词,直接索引
支持模糊、精确查询
支持聚合
'''
suggest = Completion(analyzer=ik_analyzer)
title = Text(analyzer="ik_max_word")
salary = Keyword()
job_city = Text(analyzer="ik_max_word")
work_years = Keyword()
degree_need = Keyword()
job_type = Keyword()
job_need = Keyword()
job_responsibility = Keyword()
job_advantage = Keyword()
job_url = Keyword()
publish_time = Keyword()
company_name = Text(analyzer="ik_max_word")
company_url = Keyword()
class Meta:
index = "lagou" # 索引===数据库
doc_type = "job" # 类型===表名
if __name__ == "__main__":
JobType.init() # 根据定义的类,生成mappings
三、爬虫获取数据
1、建立对各大招聘网站的爬虫。
2、数据分析。
3、保存到elastic中。
ElasticSearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。充分利用ElasticSearch的水平伸缩性,能使数据在生产环境变得更有价值。ElasticSearch 的实现原理主要分为以下几个步骤,首先用户将数据提交到Elastic Search 数据库中,再通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据,当用户搜索数据时候,再根据权重将结果排名,打分,再将返回结果呈现给用户。
在items.py 文件中将爬取的数据保存到elastic中,
def save_to_es(self):
#保存到es中
job = JobType()
job.title = self['title']
job.salary = self["salary"]
job.job_city = self["job_city"]
job.work_years = self["work_years"]
job.degree_need = self["degree_need"]
job.job_type = self["job_type"]
job.job_need = self["job_need"]
job.job_responsibility = self["job_responsibility"]
job.job_advantage = self["job_advantage"]
job.job_url = self["job_url"]
job.publish_time = self["publish_time"]
job.company_name = self["company_name"]
job.company_url = self["company_url"]
job.save()