使用whoosh 针对自己的博客完成全文搜索功能

安装whoosh 和jieba(用于中文分词处理)

在这里搜索需要的安装包,复制安装命令即可

先将博客数据保存为 json格式,注意需要使用headers

from bs4 import BeautifulSoup

import requests

import time

import json

with open('blogs_20180729.html', encoding='utf8', mode='r') as f:

soup = BeautifulSoup(f.read(), 'html.parser')

blog_urls = [{'url': i['href'], 'title': i.text} for i in soup.select('.blog h2 a[name]')]

headers = {

'Host': 'my.oschina.net',

'Connection': 'keep-alive',

'Pragma': 'no-cache',

'Cache-Control': 'no-cache',

'Upgrade-Insecure-Requests': '1',

'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Mobile Safari/537.36',

'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',

'Accept-Encoding': 'gzip, deflate, br',

'Accept-Language': 'zh-CN,zh;q=0.8',

}

print(len(blog_urls))

blogs = []

for blog in blog_urls:

# print(blog)

title = blog["title"]

html = requests.get(blog['url'], headers=headers).text

url = blog['url']

try:

blogs.append(

{

'url': url,

'title': title,

'html': html,

}

)

except Exception as e:

print(blogs, e)

time.sleep(0.2)

with open('blogs.json', mode='w+', encoding='utf8') as f:

json.dump(blogs, f)

创建索引

from whoosh.index import create_in

from whoosh.fields import *

from jieba.analyse import ChineseAnalyzer

import json

# 导入中文分词工具

analyser = ChineseAnalyzer()

# 可以设置不同类型的索引

# schema = Schema(phone_name=TEXT(stored=True, analyzer=analyser),

# price=NUMERIC(stored=True),

# phoneid=ID(stored=True)) # 创建索引结构

schema = Schema(

title=TEXT(stored=True, analyzer=analyser),

html=TEXT(stored=True),

url=TEXT(stored=True)

)

# path 为索引创建的地址,blog_index 为索引名称

ix = create_in("path", schema=schema, indexname='blog_index')

writer = ix.writer()

# 写入数据

with open('blogs.json', mode='r') as f:

blogs = json.load(f)

for blog in blogs:

writer.add_document(

title=blog['title'],

html=blog['html'],

url=blog['url']

)

writer.commit()

print("建立完成一个索引")

执行查询

查询条件为,只要关键字在题目和html中出现就匹配

from whoosh.index import open_dir

from whoosh.query import *

index = open_dir("path", indexname='blog_index') # 读取建立好的索引

def find(words):

with index.searcher() as searcher:

myquery = And([

Or([Term("html", w), Term("title", w)])

for w in words

]

)

results = searcher.search(myquery, limit=None)

for res in results:

print(res['title'], res['url'])

s = 'vue webpack'

words = [w.strip() for w in s.split()]

find(words)

结果

高亮检索到的单词

for res in results:

print(res.highlights('title'))

转载至链接:https://my.oschina.net/ahaoboy/blog/1919654

python 全文检索_Python whoosh 全文检索相关推荐

  1. python全文检索框架_全文检索框架haystack和搜索引擎whoosh的使用

    认识全文检索和搜索引擎以及相应的安装配置 1.认识全文检索和搜索引擎 全文检索不同于特定字段的模糊查询,使用全文检索的效率更高,并且能够对于中文进行分词处理. haystack:全文检索的框架,支持w ...

  2. python 床前明月光_Python之利用Whoosh搭建轻量级搜索

    本文将简单介绍Python中的一个轻量级搜索工具Whoosh,并给出相应的使用示例代码. Whoosh简介 Whoosh由Matt Chaput创建,它一开始是一个为Houdini 3D动画软件包的在 ...

  3. whoosh全文检索

    whoosh全文检索 纯Python编写的全文搜索引擎,对于小型的站点,whoosh已经足够使 用 Whoosh速度很快,使用纯Python,因此它将在Python运行的任何地方 运行,而无需编译器 ...

  4. Python之利用Whoosh搭建轻量级搜索

      本文将简单介绍Python中的一个轻量级搜索工具Whoosh,并给出相应的使用示例代码. Whoosh简介   Whoosh由Matt Chaput创建,它一开始是一个为Houdini 3D动画软 ...

  5. PHP+mysql数据库开发搜索功能:中英文分词+全文检索(MySQL全文检索+中文分词(SCWS))...

    PHP+mysql数据库开发类似百度的搜索功能:中英文分词+全文检索 中文分词: a)   robbe PHP中文分词扩展: http://www.boyunjian.com/v/softd/robb ...

  6. python画代码-Python教程_Python画Mandelbrot集 代码

    Python教程_Python画Mandelbrot集 代码 作者:Comet 来源: 课课家 www.kokojia.com点击数:278发布时间:2015-06-19 11:17:19 曼德勃罗集 ...

  7. c语言实现爬虫功能,用C/C 扩展Python语言_python 调用c语言 python实现简单爬虫功能_python实现简单爬虫...

    用C/C 扩展Python语言 Python是一门功能强大的脚本语言,它的强大不仅表现在功能上,还表现在其扩展性上.她提供大量的API以方便程序员利用C/C++对Python进行扩展.因为执行速度慢几 ...

  8. python编程语言_python编程语言的简要历史

    python编程语言 The Python programming language is a general-purpose programming language that has carved ...

  9. 2019最新Python学习教程(Python视频教程_Python学习教程_Python学习路线):你心目中编程界的MVP是谁?

    2019最新Python学习教程(Python视频教程_Python学习教程_Python学习路线):你心目中编程界的MVP是谁?编程界的王者是渐落寞的Java还是大火的Python? 是不是你们也喜 ...

最新文章

  1. tf.placeholder函数说明
  2. [code] spectral cluster
  3. bl 和 ldr跳转程序的区别
  4. 2.3线性表的链式存储和运算—双向链表
  5. 计算机网络——标准化工作及相关组织
  6. KubeFlow安装指南
  7. [PeterDLax著泛函分析习题参考解答]第4章 Hahn-Bananch 定理的应用
  8. 360浏览器的html在哪里,360浏览器收藏夹路径在哪里
  9. popwindow的显示层面
  10. 《出版专业实务·初级(2020版)》学习笔记
  11. origin 2018安装教程与安装包
  12. Kaggle—共享单车数据分析
  13. 【WinHex篇】WinHex跳过坏扇区制作磁盘镜像
  14. windows 11 锁屏壁纸路径
  15. 团组织关系的转接流程
  16. 程控交换机与集团电话的区别是什么
  17. CSS——低调的奢华
  18. 因式分解结合最近邻:多层面的协同过滤模型
  19. Some VMware images
  20. 抖音怎么注销账号?操作流程步骤有哪些?

热门文章

  1. D3.js中Bullet Charts详解
  2. 【问题】win10开机慢 底部任务栏出来慢
  3. win10 0x80070035错误 无法访问同网络共享文件
  4. Python爬虫 教程:IP池的使用
  5. oracle的url配置说明,Oracle数据库url连接最后一个orcl代表的是配置的数据库SID
  6. Jetpack Compose - TextField
  7. jQuery 实现input搜索框自动匹配------Sestid
  8. iOS-发布APP到AppStore
  9. 塑造一个没有明确风格的战士!3DMax打造海岛型金甲神人!你学会了吗?
  10. vSphere虚拟化之网络配置