前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用Python打造属于自己的搜索引擎

用Python打造属于自己的搜索引擎

作者头像
龙哥
发布2018-10-22 14:16:23
4.1K0
发布2018-10-22 14:16:23
举报
文章被收录于专栏:Python绿色通道Python绿色通道

写在前面

昨天接了一个IT行业培训广告,有极小部分读者取关了,虽然体量很小,但我还是有点痛心! 经常熬夜更新公众号,累积收到的打赏连一杯咖啡都买不了。现在发个广告赚个小小的咖啡钱就不乐意了。我也不强求打赏,但我发个小小的培训广告对读者是没有任何影响的,却被取关了。如果想永远得到服务,肯定需要给予赞助吧!不然怎么得到持续的服务。读者不赞助,为什么也不让从别人那里获得赞助呢? 我接广告也有自己的原则,我只接IT培训类的广告,并且口碑要好,我需要对每一个读者负责,不会乱接广告的! 最后要说一下:能接到广告的公众号,一般都是有质量的公众号,要想公众号持续输出有质量的文章,肯定需要有一些赞助,这是相辅相成的,大家都是成年人,这个道理都懂!

进入主题

这里我是用Flask框架来做的一个简单的搜索引擎,只用于学习,勿做它用!

且看效果:

视频内容

主要就是熟悉一下Flask的基本使用,再复习一下爬虫的东西

打开Pycharm,然后New Project 选择Flask模块,然后会自动安装Flask库的,这里就不赘述了

先介绍一下Flask, Flask是Python中的一个轻量web框架,能满足我们一般开发需求

运行Flask

代码语言:javascript
复制
#这里可以帮助你声明路由
app = Flask(__name__)


#这里是调用入口
if __name__ == '__main__':
    app.run()

应用启动

代码语言:javascript
复制
#coding:utf-8

from flask import request
from flask import Flask,  render_template
from spiderData import search_info

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

# 这里声明Flask的路由
app = Flask(__name__)

@app.route('/')
def index():
    # 打印出Hello world
    return 'Hello world'
    # 这里可以跳转到模块页,注意这里需要把html页面放在模板文件夹中
    #return render_template('/search.html')
    # 这里跳转可以把需要传入的数据传入到指定网页中,并用{{name}}来获取数据
   # return render_template('/result.html',name = 'zhangsan',)

@app.route('/search')
def search():
    # 使用Flask的request来获取get请求传来的参数
    keyword = request.args.get('wd')
    print keyword
    result = search_info(keyword)
    # 这里跳转可以把需要传入的数据传入到指定网页中,并用{{name}}来获取数据
    return render_template('/result.html',data = result,num = len(result))

# 这里可以传入数据<name>
@app.route('/user/<name>')
def user(name):
    return '<h1>hello,%s!' % name

if __name__ == '__main__':
    app.run()

获取数据

爬取百度搜索的内容页,这里我只获取到第一页数据,由于下一页数据并没有规律,只能通过Selenium来点击下一页获取,为不影响使用体验,这里我暂时没有做下一页数据.有兴趣的朋友可以自己做一下.

代码语言:javascript
复制
# coding:utf-8
import requests
import re
import json
import urllib
from lxml import etree
from flask import render_template


def search_info(keyword):
    results_list = []
    # 这里可以研究得出关键是后面变化的关键词
    url = 'https://www.baidu.com/s?word={}'.format(keyword)
    print '----------------{}'.format(url)
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.4620.400 QQBrowser/9.7.13014.400'
    }

    response = requests.get(url,headers = headers)
    response.encoding = 'utf-8'
    #打印出得到的结果
   # print response.text
    source = etree.HTML(response.text)
    results =  source.xpath('//*[@id]/@data-tools')
    for r in results:
        try:
            # 这里需要对 xpath取取的结果进行转码:<type 'lxml.etree._ElementUnicodeResult'> 转成str
            # 然后再把字符串转换成json,再取值
            str = json.loads(r.encode('utf-8'))
            results_list.append(str)
            print str['title'],str['url']
        except Exception as e:
            continue
    return results_list

开始请求

search.html页面(排版工具对html代码不支持故这里不放) 这里需要注意一下action,我这里/search 指定到路由中search方法,然后并调用里面的方法,method是get

显示搜索结果

见result.html (排版工具对html代码不支持故这里不放)

代码Github地址:https://github.com/pythonchannel/a_flask

Flask简单使用参考一下这个文章: http://www.jb51.net/article/65197.htm

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-03-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python绿色通道 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 写在前面
  • 进入主题
  • 应用启动
  • 获取数据
  • 开始请求
  • 显示搜索结果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档