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将股票名称转换为首字母。

三、基金搜索

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

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

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

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

大涨大跌基金查询:

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

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

相关推荐
Juchecar12 分钟前
解惑:NumPy 中 ndarray.ndim 到底是什么?
python
用户83562907805123 分钟前
Python 删除 Excel 工作表中的空白行列
后端·python
Json_24 分钟前
使用python-fastApi框架开发一个学校宿舍管理系统-前后端分离项目
后端·python·fastapi
子竹聆风2 小时前
Feapder框架UpdateItem使用技巧:如何优雅地实现"只更新有值字段"
爬虫
数据智能老司机7 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机8 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机8 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机8 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i8 小时前
drf初步梳理
python·django
每日AI新事件8 小时前
python的异步函数
python