精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

手把手教你使用Flask搭建ES搜索引擎(預備篇)

開發 前端
Elasticsearch 是一個開源的搜索引擎,建立在一個全文搜索引擎庫 Apache Lucene™ 基礎之上。那么如何實現 Elasticsearch和 Python 的對接成為我們所關心的問題了。

[[406279]]

1 前言

Elasticsearch 是一個開源的搜索引擎,建立在一個全文搜索引擎庫 Apache Lucene™ 基礎之上。

那么如何實現 Elasticsearch和 Python 的對接成為我們所關心的問題了 (怎么什么都要和 Python 關聯啊)。

2 Python 交互

所以,Python 也就提供了可以對接 Elasticsearch的依賴庫。

  1. pip install elasticsearch 

初始化連接一個 Elasticsearch 操作對象。

  1. def __init__(self, index_type: str, index_name: str, ip="127.0.0.1"): 
  2.  
  3.     # self.es = Elasticsearch([ip], http_auth=('username''password'), port=9200) 
  4.     self.es = Elasticsearch("localhost:9200"
  5.     self.index_type = index_type 
  6.     self.index_name = index_name 

默認端口 9200,初始化前請確保本地已搭建好 Elasticsearch的所屬環境。

根據 ID 獲取文檔數據

  1. def get_doc(self, uid): 
  2.     return self.es.get(index=self.index_name, id=uid) 

插入文檔數據

  1. def insert_one(self, doc: dict): 
  2.     self.es.index(index=self.index_name, doc_type=self.index_type, body=doc) 
  3.  
  4. def insert_array(self, docs: list): 
  5.     for doc in docs: 
  6.         self.es.index(index=self.index_name, doc_type=self.index_type, body=doc) 

搜索文檔數據

  1. def search(self, query, countint = 30): 
  2.     dsl = { 
  3.         "query": { 
  4.             "multi_match": { 
  5.                 "query": query, 
  6.                 "fields": ["title""content""link"
  7.             } 
  8.         }, 
  9.         "highlight": { 
  10.             "fields": { 
  11.                 "title": {} 
  12.             } 
  13.         } 
  14.     } 
  15.     match_data = self.es.search(index=self.index_name, body=dsl, size=count
  16.     return match_data 
  17.  
  18. def __search(self, query: dict, countint = 20): # count: 返回的數據大小 
  19.     results = [] 
  20.     params = { 
  21.         'size'count 
  22.     } 
  23.     match_data = self.es.search(index=self.index_name, body=query, params=params) 
  24.     for hit in match_data['hits']['hits']: 
  25.         results.append(hit['_source']) 
  26.  
  27.     return results 

刪除文檔數據

  1. def delete_index(self): 
  2.     try: 
  3.         self.es.indices.delete(index=self.index_name) 
  4.     except
  5.         pass 

好啊,封裝 search 類也是為了方便調用,整體貼一下。

  1. from elasticsearch import Elasticsearch 
  2.  
  3.  
  4. class elasticSearch(): 
  5.  
  6.     def __init__(self, index_type: str, index_name: str, ip="127.0.0.1"): 
  7.  
  8.         # self.es = Elasticsearch([ip], http_auth=('elastic''password'), port=9200) 
  9.         self.es = Elasticsearch("localhost:9200"
  10.         self.index_type = index_type 
  11.         self.index_name = index_name 
  12.  
  13.     def create_index(self): 
  14.         if self.es.indices.exists(index=self.index_name) is True
  15.             self.es.indices.delete(index=self.index_name) 
  16.         self.es.indices.create(index=self.index_name, ignore=400) 
  17.  
  18.     def delete_index(self): 
  19.         try: 
  20.             self.es.indices.delete(index=self.index_name) 
  21.         except
  22.             pass 
  23.  
  24.     def get_doc(self, uid): 
  25.         return self.es.get(index=self.index_name, id=uid) 
  26.  
  27.     def insert_one(self, doc: dict): 
  28.         self.es.index(index=self.index_name, doc_type=self.index_type, body=doc) 
  29.  
  30.     def insert_array(self, docs: list): 
  31.         for doc in docs: 
  32.             self.es.index(index=self.index_name, doc_type=self.index_type, body=doc) 
  33.  
  34.     def search(self, query, countint = 30): 
  35.         dsl = { 
  36.             "query": { 
  37.                 "multi_match": { 
  38.                     "query": query, 
  39.                     "fields": ["title""content""link"
  40.                 } 
  41.             }, 
  42.             "highlight": { 
  43.                 "fields": { 
  44.                     "title": {} 
  45.                 } 
  46.             } 
  47.         } 
  48.         match_data = self.es.search(index=self.index_name, body=dsl, size=count
  49.         return match_data 

嘗試一下把 Mongodb 中的數據插入到 ES 中。

  1. import json 
  2. from datetime import datetime 
  3. import pymongo 
  4. from app.elasticsearchClass import elasticSearch 
  5.  
  6. client = pymongo.MongoClient('127.0.0.1', 27017) 
  7. db = client['spider'
  8. sheet = db.get_collection('Spider').find({}, {'_id': 0, }) 
  9.  
  10. es = elasticSearch(index_type="spider_data",index_name="spider"
  11. es.create_index() 
  12.  
  13. for i in sheet: 
  14.     data = { 
  15.             'title': i["title"], 
  16.             'content':i["data"], 
  17.             'link': i["link"], 
  18.             'create_time':datetime.now() 
  19.         } 
  20.  
  21.     es.insert_one(doc=data) 

到 ES 中查看一下,啟動 elasticsearch-head 插件。

如果是 npm 安裝的那么 cd 到根目錄之后直接 npm run start 就跑起來了。

本地訪問 http://localhost:9100/

發現新加的 spider 數據文檔確實已經進去了。

3 爬蟲入庫

要想實現 ES 搜索,首先要有數據支持,而海量的數據往往來自爬蟲。

為了節省時間,編寫一個最簡單的爬蟲,抓取 百度百科。

簡單粗暴一點,先 遞歸獲取 很多很多的 url 鏈接

  1. import requests 
  2. import re 
  3. import time 
  4.  
  5. exist_urls = [] 
  6. headers = { 
  7.     'User-Agent''Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36'
  8.  
  9. def get_link(url): 
  10.     try: 
  11.         response = requests.get(url=url, headers=headers) 
  12.         response.encoding = 'UTF-8' 
  13.         html = response.text 
  14.         link_lists = re.findall('.*?<a target=_blank href="/item/([^:#=<>]*?)".*?</a>', html) 
  15.         return link_lists 
  16.     except Exception as e: 
  17.         pass 
  18.     finally: 
  19.         exist_urls.append(url) 
  20.  
  21.  
  22. # 當爬取深度小于10層時,遞歸調用主函數,繼續爬取第二層的所有鏈接 
  23. def main(start_url, depth=1): 
  24.     link_lists = get_link(start_url) 
  25.     if link_lists: 
  26.         unique_lists = list(set(link_lists) - set(exist_urls)) 
  27.         for unique_url in unique_lists: 
  28.             unique_url = 'https://baike.baidu.com/item/' + unique_url 
  29.  
  30.             with open('url.txt''a+'as f: 
  31.                 f.write(unique_url + '\n'
  32.                 f.close() 
  33.         if depth < 10: 
  34.             main(unique_url, depth + 1) 
  35.  
  36. if __name__ == '__main__'
  37.     start_url = 'https://baike.baidu.com/item/%E7%99%BE%E5%BA%A6%E7%99%BE%E7%A7%91' 
  38.     main(start_url) 

把全部 url 存到 url.txt 文件中之后,然后啟動任務。

  1. # parse.py 
  2. from celery import Celery 
  3. import requests 
  4. from lxml import etree 
  5. import pymongo 
  6. app = Celery('tasks', broker='redis://localhost:6379/2'
  7. client = pymongo.MongoClient('localhost',27017) 
  8. db = client['baike'
  9. @app.task 
  10. def get_url(link): 
  11.     item = {} 
  12.     headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36'
  13.     res = requests.get(link,headers=headers) 
  14.     res.encoding = 'UTF-8' 
  15.     doc = etree.HTML(res.text) 
  16.     content = doc.xpath("//div[@class='lemma-summary']/div[@class='para']//text()"
  17.     print(res.status_code) 
  18.     print(link,'\t','++++++++++++++++++++'
  19.     item['link'] = link 
  20.     data = ''.join(content).replace(' ''').replace('\t''').replace('\n''').replace('\r'''
  21.     item['data'] = data 
  22.     if db['Baike'].insert(dict(item)): 
  23.         print("is OK ..."
  24.     else
  25.         print('Fail'

run.py 飛起來

  1. from parse import get_url 
  2.  
  3. def main(url): 
  4.     result = get_url.delay(url) 
  5.     return result 
  6.  
  7. def run(): 
  8.     with open('./url.txt''r'as f: 
  9.         for url in f.readlines(): 
  10.             main(url.strip('\n')) 
  11.  
  12. if __name__ == '__main__'
  13.     run() 

黑窗口鍵入

  1. celery -A parse worker -l info -P gevent -c 10 

哦豁 !! 你居然使用了 Celery 任務隊列,gevent 模式,-c 就是10個線程刷刷刷就干起來了,速度杠杠的 !!

啥?分布式? 那就加多幾臺機器啦,直接把代碼拷貝到目標服務器,通過 redis 共享隊列協同多機抓取。

這里是先將數據存儲到了 MongoDB 上(個人習慣),你也可以直接存到 ES 中,但是單條單條的插入速度堪憂(接下來會講到優化,哈哈)。

使用前面的例子將 Mongo 中的數據批量導入到 ES 中,OK !!!

到這一個簡單的數據抓取就已經完畢了。

好啦,現在 ES 中已經有了數據啦,接下來就應該是 Flask web 的操作啦,當然,Django,FastAPI 也很優秀。嘿嘿,你喜歡 !!

 

責任編輯:姜華 來源: Python爬蟲與數據挖掘
相關推薦

2020-10-23 09:03:28

Flask

2014-04-11 13:52:28

2024-11-05 16:40:24

JavaScript搜索引擎

2021-08-24 10:02:21

JavaScript網頁搜索 前端

2022-02-25 09:41:05

python搜索引擎

2022-03-14 14:47:21

HarmonyOS操作系統鴻蒙

2025-05-07 00:31:30

2021-07-14 09:00:00

JavaFX開發應用

2011-03-25 12:45:49

Oracle SOA

2022-12-07 08:42:35

2010-07-06 09:38:51

搭建私有云

2022-01-04 08:52:14

博客網站Linux 系統開源

2010-07-06 09:43:57

搭建私有云

2021-08-02 07:35:19

Nacos配置中心namespace

2011-05-03 15:59:00

黑盒打印機

2011-01-10 14:41:26

2025-02-26 07:40:25

運營分析體系運營策略

2010-01-20 10:44:01

linux DHCP服務器

2021-03-12 10:01:24

JavaScript 前端表單驗證

2022-10-30 10:31:42

i2ccpuftrace
點贊
收藏

51CTO技術棧公眾號

国产亚洲电影| 日韩精品人妻中文字幕有码| 久久久久亚洲av无码麻豆| 手机av在线播放| www.亚洲人| 91精品国产综合久久久久久蜜臀| 免费在线视频观看| 国语产色综合| 精品美女在线播放| 88av.com| av日韩国产| 国产精品三级视频| 精品乱码一区| 91在线你懂的| 嫩草成人www欧美| 久久人人爽亚洲精品天堂| 久久人人爽人人爽人人片| 91国产一区| 色婷婷久久久久swag精品| 国产一级不卡视频| jizz亚洲| 91麻豆国产自产在线观看| 91视频网页| 中文字幕乱码人妻二区三区| 在线综合视频| 欧美激情在线有限公司| 欧美日韩生活片| 日韩欧美四区| 亚洲成人激情视频| 欧美图片自拍偷拍| 激情五月综合婷婷| 欧美高清hd18日本| 亚洲一级免费在线观看| 五月激情久久| 一本一本久久a久久精品综合麻豆| www.国产在线视频| 二区三区在线观看| 亚洲视频狠狠干| 一区二区三区免费看| 高清av在线| 久久久久国产精品人| 久久久99爱| 天堂成人在线观看| 不卡视频在线看| 国产精品久久精品视| 99热这里精品| 国产精品一区免费在线观看| 91久久嫩草影院一区二区| 亚洲免费视频二区| 免费不卡在线视频| 国产精品欧美激情在线播放| 午夜视频网站在线观看| 日韩精品一级中文字幕精品视频免费观看 | 欧美黄色性视频| tube国产麻豆| 欧美大片一区| 欧美精品video| 69精品久久久| 国产精品永久| 国产成人精品一区二区三区| 波多野结衣黄色网址| 日韩高清中文字幕一区| 国产精品日韩欧美大师| 亚洲天天综合网| 九九九久久久精品| 91精品黄色| 欧美自拍偷拍第一页| 99久久精品国产导航| 欧美日韩精品久久久免费观看| 欧美精品少妇| 国产精品麻豆99久久久久久| 二级片在线观看| 欧美家庭影院| 欧美日韩在线一区| www.色就是色| crdy在线观看欧美| 亚洲精品mp4| 少妇人妻好深好紧精品无码| 久久综合国产| 欧美极品在线视频| 日本视频在线观看免费| 蜜臀va亚洲va欧美va天堂| 亚洲影视九九影院在线观看| 日本美女一级片| 国产女人18毛片水真多成人如厕| 成人97人人超碰人人99| 国产精品久久久久久五月尺| 国产尤物在线观看| 99九九99九九九视频精品| 日本不卡一区| 欧美卡一卡二| 欧美性受xxxx黑人xyx| 91视频福利网| 国产伦一区二区三区| 日韩一区二区av| 日韩成年人视频| 免费一级片91| 狠狠色噜噜狠狠狠狠色吗综合| 黄色av网站在线免费观看| 亚洲美女视频在线观看| 成人观看免费完整观看| 精品中文字幕一区二区三区| 亚洲欧美成人网| 欧美日韩国产精品一区二区三区| 日韩福利电影在线| 鬼打鬼之黄金道士1992林正英| 四虎永久在线精品免费网址| 综合网在线视频| 情侣黄网站免费看| 日韩欧美中文字幕在线视频| 一区二区三区日韩在线| 自拍偷拍欧美亚洲| 国产美女精品人人做人人爽| 日本在线一区| 绿色成人影院| 亚洲精品在线观| www色aa色aawww| 日韩高清不卡一区二区三区| 狠狠色伊人亚洲综合网站色| 特级毛片在线| 91精品久久久久久久99蜜桃| 日韩精品电影一区二区| 99香蕉国产精品偷在线观看 | 欧美日韩在线不卡视频| 日本一区精品视频| 日韩专区在线播放| 中文字幕视频二区| 久久精品免费在线观看| 国产精品丝袜久久久久久消防器材| 亚洲电影一区| 久久婷婷国产麻豆91天堂 | 欧美一区二区高清| 国产aⅴ夜夜欢一区二区三区| 久草福利资源在线| 视频一区欧美日韩| 裸模一区二区三区免费| 丰满诱人av在线播放| 日韩一区二区中文字幕| 国产麻豆视频在线观看| 另类小说视频一区二区| 亚洲国产精品一区二区第一页 | 香蕉国产精品| 国产欧美最新羞羞视频在线观看| yw视频在线观看| 欧美在线你懂得| 午夜时刻免费入口| 日韩影院精彩在线| 亚洲精品无人区| 日韩三级一区| 久久偷看各类女兵18女厕嘘嘘| 亚洲一级av毛片| 国产精品久久久久久久久免费丝袜 | 性欧美video高清bbw| 欧美一级夜夜爽| 欧美丰满熟妇bbbbbb| 国产 日韩 欧美大片| 欧美国产视频一区| 久久久久久毛片免费看| 欧美专区第一页| 成人在线免费电影| 欧美日韩一区二区三区免费看| www.日本高清视频| 国内成人自拍视频| 又大又硬又爽免费视频| 欧美wwwsss9999| 国产精品黄色av| 欧美18一19xxx性| 在线不卡一区二区| 九九热国产在线| 99国产精品久久久久久久久久 | 国产.欧美.日韩| 免费在线观看亚洲视频| 国产一区二区三区四区大秀| 国产日韩欧美夫妻视频在线观看| 大地资源网3页在线观看| 精品国产一区二区三区不卡 | 91青草视频久久| 日本性爱视频在线观看| 日韩精品在线影院| 亚洲天堂avav| 午夜精品久久久久影视| 国产一区二区三区精品在线| 国内精品视频一区二区三区八戒 | 日韩精品乱码av一区二区| 亚洲一卡二卡三卡| 一区中文字幕| 国产精品久久久久久网站| 在线视频中文字幕第一页| 亚洲精品电影在线观看| 一二三区在线播放| 精品久久久久久久久国产字幕| 色噜噜噜噜噜噜| www.性欧美| 久久久久久久高清| 亚洲一区二区三区免费在线观看| 一区二区日本| 亚洲v天堂v手机在线| 91日本视频在线| 精品国产免费人成网站| 欧美巨乳在线观看| 国产黄在线看| 亚洲精品97久久| av网站在线免费看| 在线亚洲+欧美+日本专区| 九九在线观看视频| 欧美激情一二三区| 国产精品无码电影| 国产精品99久久久久久久女警| 国产精品免费成人| 亚洲三级电影在线观看| www.午夜色| 精品日韩在线| 久久综合九九| 大香伊人久久精品一区二区| 国产在线98福利播放视频| 伊人久久国产| 97香蕉超级碰碰久久免费软件 | 91国语精品自产拍在线观看性色| 日本免费在线视频| 亚洲视频综合网| 五月婷在线视频| 欧美精品一区二区三区一线天视频 | av噜噜色噜噜久久| 91麻豆精品| 国产精品久久一| 欧美大片1688| 欧美一区二粉嫩精品国产一线天| 国内高清免费在线视频| 日韩一区二区三区国产| 成人在线观看网站| 国产午夜精品视频| 你懂的视频在线观看| 亚洲第一页在线| 日韩一区二区三区不卡| 日韩欧美三级在线| www.国产.com| 日韩亚洲欧美在线| av高清一区二区| 欧美一级理论片| 亚洲精品国产精品国| 日韩欧美在线综合网| hs视频在线观看| 欧美一区2区视频在线观看| 91精品视频免费在线观看 | 182午夜视频| 国内精品久久久久影院色| 亚洲欧美日本一区二区| 国产中文字幕精品| 中文字幕欧美视频| 丁香六月综合激情| 喷水视频在线观看| 26uuu久久天堂性欧美| 香蕉视频黄色在线观看| 久久久久久久久免费| 黄色aaa视频| 欧美国产精品劲爆| 日韩三级在线观看视频| 亚洲一区在线观看视频| 日本中文字幕网| 色综合av在线| 在线免费看av的网站| 欧美一区二区啪啪| 老牛影视av牛牛影视av| 日韩精品视频免费专区在线播放| 日本a一级在线免费播放| 亚洲天堂第二页| 蜜桃视频网站在线观看| 欧美激情视频三区| 中文在线аv在线| 国产精品视频男人的天堂| 二区三区精品| 韩日午夜在线资源一区二区 | 国产情侣呻吟对白高潮| 777xxx欧美| 丰满人妻妇伦又伦精品国产| 日韩毛片在线观看| 天堂中文8资源在线8| 欧美区二区三区| 欧美aa视频| 91成人伦理在线电影| 亚洲+变态+欧美+另类+精品| 午夜精品亚洲一区二区三区嫩草| 欧美在线亚洲综合一区| 亚洲人成无码www久久久| 国产一区二区三区四区五区入口 | 国产精品网站一区| 国产在线观看免费视频今夜| 色婷婷av一区二区三区软件 | 爱爱爱视频网站| 亚洲综合国产| 国产精品久久久久久久99| 91视频精品在这里| 精品爆乳一区二区三区无码av| 日本精品一区二区三区四区的功能| 国产99999| 国产亚洲福利一区| 91白丝在线| 91在线直播亚洲| 精品72久久久久中文字幕| 蜜桃视频一区二区在线观看| 久久www成人_看片免费不卡| 亚洲精品乱码久久久久久动漫| 久久精品一区二区三区av| 动漫精品一区一码二码三码四码| 欧美色综合网站| 欧美在线一卡| 久久久免费av| 日韩在线亚洲| 国产91av视频在线观看| 免费在线亚洲欧美| 国产日韩视频一区| 亚洲人成伊人成综合网小说| 国产成人a v| 亚洲精品在线看| ****av在线网毛片| 亚洲最大av在线| 国产大片一区| 亚洲色图 在线视频| 久久久综合网站| 午夜影院在线看| 精品国产一区二区三区久久久蜜月| 免费黄色网页在线观看| 国产精品v日韩精品| 偷窥自拍亚洲色图精选| 日韩中字在线观看| 成人午夜精品在线| 欧美黑人一级片| 欧美一级在线视频| 中文在线字幕免费观看| 91亚洲国产成人精品性色| 日韩成人a**站| 色婷婷成人在线| 国产精品色在线| 国产一区二区麻豆| 久久精品国产久精国产思思| jizz久久久久久| 午夜精品美女久久久久av福利| 爽好多水快深点欧美视频| 日本黄色网址大全| 日韩欧美中文免费| 青青久在线视频免费观看| 青青草99啪国产免费| 精品一区毛片| 国产天堂在线播放| 国产精品美女久久久久aⅴ国产馆| 国产一级片免费视频| 色777狠狠综合秋免鲁丝| 欧美成人毛片| 日本丰满少妇黄大片在线观看| 黄网站免费久久| 加勒比婷婷色综合久久| 日韩精品一区二区三区视频在线观看 | 精品女人视频| 3d动漫一区二区三区| 久久综合色8888| 久草热在线观看| 久久久91精品国产一区不卡| 日韩成人视屏| a√天堂在线观看| 欧美激情一区二区三区在线| 91丨porny丨在线中文 | 美女视频久久黄| 97青娱国产盛宴精品视频| 奇米精品一区二区三区| 久久久久久麻豆| 一级特黄aaaaaa大片| 欧美丰满老妇厨房牲生活| 老牛精品亚洲成av人片| 日本美女高潮视频| 亚洲欧美日韩系列| 熟妇高潮一区二区高潮| 国产精品视频公开费视频| 欧美国产综合| 波多野结衣福利| 51午夜精品国产| 成年女人在线看片| 亚洲春色综合另类校园电影| 国产精品一区二区男女羞羞无遮挡| 国产一级视频在线| 亚洲一区999| 香蕉大人久久国产成人av| 色欲av无码一区二区人妻| 国产精品灌醉下药二区| 色噜噜在线播放| 国产精品中文久久久久久久| 亚洲精品激情| 日韩一区二区三区四区视频| 精品国产百合女同互慰| 草莓视频成人appios| 免费网站在线观看视频 | 性欧美大战久久久久久久免费观看| 国产一区二区三区久久久| 天天操中文字幕| 久热精品视频在线观看| 久久91精品| 男人操女人下面视频| 欧美三级视频在线观看| 久久青草伊人| 伊人网在线免费| 欧美国产日韩a欧美在线观看 |