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

三、基金搜索

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

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

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

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

大涨大跌基金查询:

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

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

相关推荐
WangYaolove131414 分钟前
请介绍一下Python的网络编程以及如何使用socket模块进行网络通信
开发语言·网络·python
codists21 分钟前
《Django 5 By Example》阅读笔记:p211-p236
python·django
pumpkin8451422 分钟前
Django
后端·python·django
噜噜噜噜鲁先森30 分钟前
零基础利用实战项目学会Pytorch
人工智能·pytorch·python·深度学习·神经网络·算法·回归
_linyu__1 小时前
TensorFlow 2.0 windows11 GPU 训练环境配置
人工智能·python·tensorflow
finbarr451 小时前
搭建es环境
大数据·elasticsearch·搜索引擎
BlackPercy2 小时前
【jupyter】文件路径的更改
ide·python·jupyter
马红权2 小时前
qtabwidget qtablewidget显示excel工作表内容(极简excel viewer)
开发语言·python·算法
PythonFun2 小时前
Excel中批量替换字符大PK:Excel VS. Python
开发语言·python·excel