关于Python爬虫之获取海量表情包+存入数据库+搭建网站通过关键字查询表情包

来源:互联网 发布:十八掌大数据视频 编辑:程序博客网 时间:2024/04/27 17:25

目标:获取海量表情包,存入数据库,然后搭建简单网站通过输入关键字获取对应的的表情包


这里我们的首先要爬取表情包的网站是这个网站:

http://www.doutula.com/photo/list/?page=0

我们先来分析一下这个网页的源代码:


源码里面可以发现我们需要的内容然后去用正则表达式获取,然后存入数据库

同时在源码最上面可以看见网页是utf-8编码的。

============================================================

注意,这里我们先说下navicat for MySQL:关于软件下载和MySQL安装之前博客说过了。

先是新建一个叫doutula的数据库


=============================================

然后在该数据库中新建一个表


===========================================

然后再在表中添加相应的id和name和imageUrl


这里要勾选上自动递增,我之前没勾选上的时候,会报错'id' doesn't have a default value

===============================================================

然后新建一个用户:


=======================

修改权限:


==============================

然后看代码吧:

#写在前面:python3.5 、win10 、navicat for MySQL、MySQL#之前都是用的urllib.request里面的Request、urlopen方法去获取一个一个网页上的内容,今天换着用用requests模块import requests,re,pymysql# 这里导入的pymysql模块,如果没有安装的用pip install pymysql安装一下#这里就是连接数据库的一个操作db = pymysql.connect(    host = '127.0.0.1', #主机,一般没有服务器就填本机吧    port = 3306,        #端口,navicat创建数据库的时候端口就是默认是3306    user = 'test1',     #这里是用户名,也是之前创建的    password = '5531663',   # 密码    db = 'doutula',     # 这里就是你在navicat新建的数据库名    charset = 'utf8'    # 写入数据库的数据都是utf8编码的,千万注意不能写为utf-8)cursor = db.cursor()    #创建一个游标,通过游标去操作一些MySQL的语句#下面是爬取一个网页的内容def getImage(i):    urlBasic = 'http://www.doutula.com/photo/list/?page='   # 发现网页大概都长这模样,只是后面的数字不同    url = urlBasic + '%s'%i      #得到完整的网页url    res = requests.get(url)     #得到一个    html = res.text    imageListRe = 'data-original="(.*?)"\s*alt="(.*?)"' #   分析网页后写的正则表达式    imageList = re.findall(imageListRe,html)    # 获取name和imageUrl    #print(imageList)    for i in imageList:        cursor.execute("insert into image(`name`,`imageUrl`) values('{}','{}')".format(i[1],i[0]))        db.commit()for i in range(1138):   # 这里查看网页后发现一共就1137页    print('正在爬取第{}页的数据'.format(i))    getImage(i)db.close()  # 不要忘记了关闭数据库连接

==========================================

然后这边看一下导入数据库后的结果:


----------------------------------------------------


一共是八万条数据。。。


==============================================

然后就是网站方面了,写一个简单的网站,实现输入关键字得到对应的图片:

上代码:

# 我们所要达到的效果就是输入关键字然后就页面上显示相关的图片,图片我们并没有下载到本地,是直接从数据库里面调用的,所以这里也要连接数据库from flask import Flaskfrom flask import render_templatefrom flask import requestimport pymysqlapp = Flask(__name__)   # 关于flask的操作之前博客提到过# 连接数据库db = pymysql.connect(    host='127.0.0.1',    port=3306,    user='test1',    password='5531663',    db='doutula',    charset='utf8',    cursorclass=pymysql.cursors.DictCursor,#这里默认从数据库中查到的数据返回回来是列表形式,这里改为了dict形式)cursor = db.cursor()@app.route('/')def index():    return render_template('index.html')    # render_template模板能返回一个网页,而网页得存在新创建的templates文件夹里面才可以@app.route('/search')def search():    kw = request.args.get('kw')    count = request.args.get('count')    cursor.execute("select * from image where `name` like '%{}%' ".format(kw))    #   这里是一个模糊匹配,就是匹配和你输入的关键字类似的name,关键字是要用'%{}%'代替,用format传入    data = cursor.fetchmany(int(count)) # 这里fetchmany就是匹配count条数据库中的数据    return render_template('index.html',images = data)app.run(debug = True)

然后里面的index.html如下:

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>斗图网站</title></head><body><form action = '/search'>    关键字:<input type = 'text' name = 'kw'><br>    查询的数量:<input type = 'text' name = 'count' value = '100'><br>    <input type = 'submit' value = '查询'></form>{% for i in images %}<img src = "{{i.imageUrl}}" alt = "{{i.name}}">{% endfor %}</body></html># {{}}是放变量 {%%}是放方法

所形成的效果如下:


==========================================

然后我们试着搜索一下关键字:‘骚’



完成。效果还不错。。。。。。。。。。。。。。。。。。。。。

以上,如有不足,欢迎指出。Thanks~!

===========================

最后补充一下:

这样运行后只能在本机上访问,

如果改为:

   app.run(host = '0.0.0.0' ,port = 5000, debug = 'True')


这样就可以使得同一个局域网内的电脑、手机都可以访问了,但是要现获得本机IP地址,

命令行里面输入ipconfig查看本机ip地址,然后在浏览器里面输入 IP地址:5000便可正常访问了

2017.11.19 19:56.................................

=======================================



原创粉丝点击