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

三、基金搜索

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

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

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

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

大涨大跌基金查询:

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

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

相关推荐
qq_349317482 分钟前
Layui如何修改表格单元格内文字的行间距
jvm·数据库·python
2301_7751481512 分钟前
Redis如何实现用户标签管理_利用Set结构存储唯一属性集合
jvm·数据库·python
tERS ERTS16 分钟前
头歌答案--爬虫实战
java·前端·爬虫
m0_5964063717 分钟前
mysql如何配置审计日志输出_mysql audit_log_format设置
jvm·数据库·python
2301_8166602126 分钟前
Bootstrap框架的最小宽度限制是多少
jvm·数据库·python
水木流年追梦42 分钟前
CodeTop Top 300 热门题目2-最长回文子串
开发语言·人工智能·python·算法·leetcode
狗都不学爬虫_43 分钟前
小程序逆向 - Hai尔(AliV3拖动物品)
javascript·爬虫·python·网络爬虫
abc123456sdggfd1 小时前
HTML5中Vuex持久化插件中WebStorage的底层配置
jvm·数据库·python
小龙Guo1 小时前
Yolo 多任务推理,摄像头+视频实时推理,实现关键点、分割、检测等模型推理部署
python·yolo·关键点检测·模型推理
pele1 小时前
Go语言如何发GET请求_Go语言HTTP GET请求教程【总结】
jvm·数据库·python