Python+Flask实现搜索引擎,万能搜索框

万能框指同时支持股票、基金、新闻搜索和命令查询等。

下面按新闻、股票、基金检索顺序介绍。

一、新闻搜索引擎主要技术

当你用Python + Selenium 下载新闻之后,如何下载参考上篇博文,就会面临新闻搜索的问题。自己做一个搜索引擎的优点很明显,没有广告,节省时间,如图的比较:

搜索体验,点击链接

新闻搜索主要包括:下载、中文分词、索引和查询等功能。

1,下载参考往期文章
2,中文分词

选用jieba分词,参考网上教程安装即可。然后,添加停用词和专业词库。停用词下载点击链接,合并了网上几个版本的停用词。专业词库比如我添加了A股、港股股票名称。

python 复制代码
def cn_fc(text,flag=0):

    import jieba

    fc = []

    #载入停用词
    stops = get_stops()

    #增加专业词
    jieba.load_userdict(word_dict)

    #增加股票名称
    for k,v in all_stocks_na.items():jieba.add_word(v)
    for k,v in hk_st_names.items():jieba.add_word(v)

    cut_res = jieba.cut(text, use_paddle=True)
3,索引

索引是搜索引擎的难点。我的做法很简单,用新闻标题和摘要代替全文,规避这个技术难点。目前下载的财经新闻大小不到500M,能满足需求。摘要生成参考以前文章。

4,查询

查询就是根据输入在文中查询相匹配的新闻。算法步骤:

1)对输入进行分词;

2)拿分词逐一扫描文件,结果存入列表;

3)按新闻出现次数给列表排序。

5,展现

搜索结果展示,使用bootstrap4的分页框架。

前端HTML中引入bootstrap.min.css

html 复制代码
<link rel="stylesheet" href="{{ url_for('static', filename= 'css/bootstrap.min.css') }}">
<!-- 展现新闻的核心代码 -->
        <table>
          <tbody>
                {% for i in items %}
                <tr>
                <td style="padding: 10px 20px 10px;border-radius: 20px">
                    <span style="font-size: 18px">
                        <a href="#" onclick="add_link('{{i[2]}}')" target="_blank">{{i[1][0]}}<font color="red">{{i[1][1]}}</font>{{i[1][2]}}</a> <br>
                    </span>
                    <span style="font-size: 14px">
                        {{i[3][0]}}<font color="red">{{i[3][1]}}</font>{{i[3][2]}}
                        ...&nbsp&nbsp{{i[0]}}
                    </span> &nbsp&nbsp
                </td>
                </tr>
                {% endfor %}
         </tbody>
         <tr style = "border: 0;background-color: white"><td></td></tr>
         <tr><td><div style = "text-align: center;font-size: 35px;margin-left: 35%">{{ pagination.links }}</div></td></tr>

        </table>

后台Python3文件,关于分页的代码这么设置即可。

from flask_paginate import Pagination, get_page_parameter

python 复制代码
    #检索结果,新闻列表
    items = sou_news(keys,120,2,is_mobile)

    page = request.args.get(get_page_parameter(), type=int, default=1)
    per_page = request.args.get('per_page', type=int, default=Num)

    total = min([len(items),100])

    start = (page - 1) * per_page
    end = start + per_page
    paginated_items = items[start:end]

    pagination = Pagination(page=page, per_page=per_page, total=total,
                            search=False, record_name='items',
                            css_framework='bootstrap4',
                            link_size=size,#分页大小
                            show_single_page=False,
                            page_parameter='page',
                            per_page_parameter='per_page')

    return render_template(sou_file,
                            input_wds=keys,
                            items=paginated_items,
                            page=page,
                            per_page=per_page,
                            pagination=pagination)

效果如下,体验链接

二、股票搜索

股票搜索,包括输入中文、代码、拼音简写。输入内容之后,搜索框下拉显示匹配的股票:

说一下拼音简写,安装pinyin

使用方法pinyin.get_initial将股票名称转换为首字母。

三、基金搜索

当输入基金名称、基金代码、基金经理时,返回匹配的基金列表。

当输入基金经理姓名时,为了方便,我会将输入转换为预先设置的基金经理编码,然后再返回他管理的基金。

将新闻、股票、基金、基金经理查询合并,就是万能搜索框。本来想把基金条件查询加进去,后面一想别为了万能而万能,分开挺好。

关于基金,还有基金净值查询:

大涨大跌基金查询:

关于搜索查询目前主要是这些内容。

如果喜欢,点个关注。有问题,欢迎留言讨论。

相关推荐
A__tao3 小时前
Elasticsearch Mapping 一键生成 Java 实体类(支持嵌套 + 自动过滤注释)
java·python·elasticsearch
研究点啥好呢3 小时前
Github热门项目推荐 | 创建你的像素风格!
c++·python·node.js·github·开源软件
迷藏4943 小时前
**发散创新:基于Rust实现的开源合规权限管理框架设计与实践**在现代软件架构中,**权限控制(RBAC)** 已成为保障
java·开发语言·python·rust·开源
明日清晨4 小时前
python扫码登录dy
开发语言·python
bazhange4 小时前
python如何像matlab一样使用向量化替代for循环
开发语言·python·matlab
人工干智能4 小时前
科普:python中你写的模块找不到了——`ModuleNotFoundError`
服务器·python
unicrom_深圳市由你创科技4 小时前
做虚拟示波器这种实时波形显示的上位机,用什么语言?
c++·python·c#
小敬爱吃饭4 小时前
Ragflow Docker部署及问题解决方案(界面为Welcome to nginx,ragflow上传文件失败,Docker中的ragflow-cpu-1一直重启)
人工智能·python·nginx·docker·语言模型·容器·数据挖掘
宸津-代码粉碎机4 小时前
Spring Boot 4.0虚拟线程实战调优技巧,最大化发挥并发优势
java·人工智能·spring boot·后端·python
知行合一。。。5 小时前
Python--04--数据容器(集合)
python