Python人工智能实战之对话机器人的实现


当前第2页 返回上一页

新建一个名为joke_db.py的文件

代码如下:

import sqlite3
from joke import Joke 

def setup():
    '''
    创建数据库和创建表,如果已经存在了不会重复创建
    '''
    con = sqlite3.connect('jokeDB.db')
    with con:
        con.execute('''CREATE TABLE IF NOT EXISTS jokes
                    (id INTEGER PRIMARY KEY,
                    title varchar(256) NOT NULL,
                    detail varchar(1024) NOT NULL,
                    url varchar(1024) NOT NULL)''')

def save(joke):
    '''
    把笑话保存到数据库
    根据url判断是否已经有这个笑话了,如果有了就不再保存
    '''
    con = sqlite3.connect('jokeDB.db')
    with con:
        cur = con.cursor()
        cur.execute(
            'SELECT * FROM jokes WHERE (url = ?)', [(joke.url)])
        has_joke = cur.fetchone()
        if has_joke:
            print('重复了,不再插入')
        else:
            con.execute('INSERT INTO jokes(title, detail, url) VALUES (?,?,?)', (joke.title, joke.detail, joke.url))
            print('笑话保存成功')

def get_jokes():
    '''
    返回所有的笑话列表
    '''
    print('loading jokes...')
    con = sqlite3.connect('jokeDB.db')
    jokes = []
    with con:
        for row in con.execute('SELECT * FROM jokes'):
            joke = Joke(row[1], row[2], row[3], row[0])
            jokes.append(joke)
    return jokes

# 调用最上面的代码
setup()

# 测试代码,本模块被别的模块引入的时候,不会执行下面的代码
if __name__ == '__main__':
    save(Joke('笑话Test', '笑话内容test', 'https://www.joke.com/1.html'))
    save(Joke('笑话Test2', '笑话内容test', 'https://www.joke.com/2.html'))
    print('========打印一下所有的笑话======')
    for joke in get_jokes():
        print(joke)
        print()

代码已经添加了比较多的注释,请先看代码。这里额外的补充:

1.要使用sqlite,需要引入sqlite3模块

2.使用sqlite要先用connect()方法获得链接,然后调用execute()方法执行SQL语句。

运行上面的代码,就可以发现文件夹下多了一个名为jokeDB.db的文件,这是程序自动创建的数据库文件,笑话就保存在里面。下面里面只有两个测试的笑话:

> python joke_db.py
笑话保存成功
笑话保存成功
========打印一下所有的笑话======
loading jokes...
1-笑话Test
笑话内容test
https://www.joke.com/1.html

2-笑话Test2
笑话内容test
https://www.joke.com/2.html

这一部分需要一定的数据库知识,不过你也可以比这葫芦画瓢,先把功能做出来,再加强相关知识。

抓取笑话并保存到数据库

现在回到joke_crawler.py中,去掉关于joke_db的注释代码

第1处在文件开头:

#先注释掉数据库相关的代码,后面需要反注释回来
#import joke_db 

第2处在文件的最下面:

for i in range(0, 10):
    joke, next_url = craw_joke(url)
    if joke:
        #先注释掉数据库相关的代码,后面需要反注释回来
        #joke_db.save(joke)
        print(joke)
        url = host + next_url
    print('歇一会儿再抓!')
    time.sleep(random.randint(1, 5))
print('抓完收工!')

去掉注释后,再次运行joke_crawler.py,就会把笑话保存在数据库中。

为了验证是否保存成功了,可以去运行joke_db.py,因为这个文件最后会打印出所有的笑话:

========打印一下所有的笑话======
loading jokes...
1-笑话Test
笑话内容test
https://www.joke.com/1.html

2-笑话Test2
笑话内容test
https://www.joke.com/2.html

3-成功
她:“因为别人都不同情你,我才做你的妻子。”他:“你总算成功了。现在每个人都因此同情我。”
http://xiaohua.zol.com.cn/detail1/1.html

4-结婚以后
女:“为什么从前你对我百依百顺,可结婚才三天,你就跟我吵了两天的架?”男:“因为我的忍耐是有限度的。”
http://xiaohua.zol.com.cn/detail1/2.html

5-我们的
燕尔新婚,新娘对新郎说:“今后咱们不兴说‘我的'了,要说‘我们的'。”新郎去洗澡,良久不出,新娘问:“你在干什么哪?”“亲爱的,我在刮我们的胡子呢。”
http://xiaohua.zol.com.cn/detail1/3.html

6-杞人忧天
妻子患了重病,医生宣告回天乏术。妻子即对丈夫说:“我现在希望你能够发誓。”“发什么誓。”“如果你再婚,不准把我的衣服给你的新妻子穿。”丈夫恍然大悟道:“这个我可以发誓。说实话,你根本不必操心,因为我再也不想找像你这样胖的太太了。”
http://xiaohua.zol.com.cn/detail1/5.html

7-理由充分
法官:“离婚理由是什么?”新娘:“他打呼噜。”法官:“结婚多长时间了?”新娘:“三天。”法官:“离婚理由充分,结婚三天还不是打呼噜的时候。”
http://xiaohua.zol.com.cn/detail1/6.html

8-聪明丈夫
某夫妇当街而过,一只鸽子飞过天空,一泡鸽粪不偏不倚正巧落在太太肩上,太太急了,忙叫丈夫拿纸。丈夫抬头,见鸽子不讲卫生,到处拉屎,却不知妻子叫他拿纸干嘛,说:“叫我有啥办法,追上前去给它擦屁股呀! ”
http://xiaohua.zol.com.cn/detail1/8.html

9-事故与灾难
一位夫人问她的丈夫:“亲爱的,你能告诉我‘事故'与‘灾难'这两个词之间有什么区别吗?”“这很简单。”丈夫认真地回答说,“譬如你失足落水,这就叫‘事故';如果人家又把你当鱼钓上来,这就是‘灾难'了。”
http://xiaohua.zol.com.cn/detail1/13.html

10-吵架的结果
夫妻吵架了。当丈夫下班回到家里,他发现妻子不在家。只在桌上留了一个条子,上面写道:“午饭在《烹调大全》第215页;晚饭在317页。”
http://xiaohua.zol.com.cn/detail1/14.html

11-保险之险
太太不懂保险的道理,认为缴保险费是浪费,先生连忙解释说:“保险是为了你和孩子,万一我死了;你们也有个保障呀! ”太太反驳说:“要是你不死呢?”
http://xiaohua.zol.com.cn/detail1/16.html

12-补不足
妻:“我晓得,你与我结婚,是因为我有钱。”夫:“不是,是因为我没有钱。”
http://xiaohua.zol.com.cn/detail1/17.html

到此这篇关于Python人工智能实战之对话机器人的实现的文章就介绍到这了,更多相关Python对话机器人内容请搜索


标签:SQLite

返回前面的内容

相关阅读 >>

Sqlite教程(八):命令行工具介绍

Sqlite与mysql区别及优缺点介绍

c#中efcore-shardingcore呈现“完美”分表

python实现实时增量数据加载工具的解决方案

简单分析Sqlite4的一些设计改变

python Sqlite3 判断cursor的结果是否为空的案例

android数据存储之Sqlite使用

system.data.Sqlite 数据库详细介绍

django的创建和使用详解(默认数据库Sqlite3)

Sqlite教程(十四):c语言编程实例代码(2)

更多相关阅读请进入《Sqlite》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...