爬虫保姆级教程2:在visual studio中使用python项目连接SQLite数据库–爬虫数据保存之数据库

采用方法二:

【SQLite】SqlLite在VisualStudio2017中C#的使用_Kevin’s life的博客-CSDN博客_vs2017sqlite插件爬虫保姆级教程2:在visual studio中使用python项目连接SQLite数据库--爬虫数据保存之数据库https://blog.csdn.net/ght886/article/details/83791418 ;补充:

vs连接数据库:

可以在这里单独连接进行独立操作:

1、连接新建的SQLite数据库

爬虫保姆级教程2:在visual studio中使用python项目连接SQLite数据库--爬虫数据保存之数据库

2、检索数据库

爬虫保姆级教程2:在visual studio中使用python项目连接SQLite数据库--爬虫数据保存之数据库

3、可视化查表

爬虫保姆级教程2:在visual studio中使用python项目连接SQLite数据库--爬虫数据保存之数据库

为什么使用SQLite:

SQLite 不是一个客户端/服务器结构的数据库引擎,而是一种嵌入式数据库,它的数据库就是一个文件。SQLite 将整个数据库,包括定义、表、索引以及数据本身,作为一个单独的、可跨平台使用的文件存储在主机中。由于 SQLite 本身使用 C 语言写的,而且体积很小,所以经常被集成到各种应用程序中。Python 就内置了 SQLite3,所以在 Python 中使用 SQLite 不需要安装任何模块,直接使用。

sqlite和mysql的使用方法具体参考:

python3基础:操作mysql数据库_小小小小人ksh的博客-CSDN博客_python连接mysql 爬虫保姆级教程2:在visual studio中使用python项目连接SQLite数据库--爬虫数据保存之数据库https://blog.csdn.net/kongsuhongbaby/article/details/84948205 ; Python 操作数据库_lucky-billy的博客-CSDN博客_python数据库爬虫保姆级教程2:在visual studio中使用python项目连接SQLite数据库--爬虫数据保存之数据库https://blog.csdn.net/qq_34139994/article/details/108328492 ;

下面进行实例演示:

第一步:创建或打开数据库文件:

import sqlite3

conn = sqlite3.connect("test_7.db")#.db表示数据库文件,这句代码的意思是,如果当前目录下没有test.db文件就创建,如果有就打开

print("open or create database successfully.");

第二步:打开数据库并建表

import sqlite3      # 导入 SQLite 数据库

连接数据库文件 demo.db,如果文件不存在,会自动在当前目录创建
conn = sqlite3.connect('test_7.db')

print("创建库成功。")

获取游标
cursor = conn.cursor()

#创建表
#结构化书写
sql = '''
    create table company
    (
        id int primary key not null,
        name char(50) not null,
        age int not null,
        address char(50),
        salary real
    );
'''
print("创建表成功。")

cursor.execute(sql)

关闭游标
cursor.close()

提交事务
conn.commit()

断开连接
conn.close()

爬虫保姆级教程2:在visual studio中使用python项目连接SQLite数据库--爬虫数据保存之数据库

第三步:插入数据

import sqlite3      # 导入 SQLite 数据库

连接数据库文件 demo.db,如果文件不存在,会自动在当前目录创建
conn = sqlite3.connect('test_7.db')

print("打开数据库成功。")

获取游标
cursor = conn.cursor()

#创建表
#结构化书写
sql = '''
    insert into company values(2,'CodeKinght',18,'大连',1000000);
'''
cursor.execute(sql)

print("插入数据成功。")

关闭游标
cursor.close()

提交事务
conn.commit()

断开连接
conn.close()

第四步:查询数据:

import sqlite3      # 导入 SQLite 数据库

连接数据库文件 demo.db,如果文件不存在,会自动在当前目录创建
conn = sqlite3.connect('test_7.db')

print("打开数据库成功。")

获取游标
cursor = conn.cursor()

#创建表
#结构化书写
sql = '''
    select * from company;
'''
cursor.execute(sql)

result = cursor.fetchall();

print(result)

关闭游标
cursor.close()

提交事务
conn.commit()

断开连接
conn.close()

爬虫保姆级教程2:在visual studio中使用python项目连接SQLite数据库--爬虫数据保存之数据库

第五步:删除数据

import sqlite3      # 导入 SQLite 数据库

连接数据库文件 demo.db,如果文件不存在,会自动在当前目录创建
conn = sqlite3.connect('test_7.db')

print("打开数据库成功。")

获取游标
cursor = conn.cursor()

#创建表
#结构化书写
sql = '''
    delete from company where id=2;
'''
cursor.execute(sql)

print("删除数据成功。")

关闭游标
cursor.close()

提交事务
conn.commit()

断开连接
conn.close()

爬虫保姆级教程2:在visual studio中使用python项目连接SQLite数据库--爬虫数据保存之数据库

查询多行指定数据:

import sqlite3      # 导入 SQLite 数据库

连接数据库文件 demo.db,如果文件不存在,会自动在当前目录创建
conn = sqlite3.connect('test_7.db')

获取游标
cursor = conn.cursor()

#创建表
#结构化书写
sql = '''
    select id,name,address,salary from company;
'''
cursor.execute(sql)

for row in cursor:
    print("id = ",row[0])
    print("name = ",row[1])
    print("address = ",row[2])
    print("salary = ",row[3],"\n")

关闭游标
cursor.close()

提交事务
conn.commit()

断开连接
conn.close()

输出:

爬虫保姆级教程2:在visual studio中使用python项目连接SQLite数据库--爬虫数据保存之数据库

上次我们爬取了豆瓣电影Top250条电影信息,并将其内容保存在了Excel表中,这次我们对保存数据的函数稍作修改将保存数据的位置改为数据库,具体代码如下。

上期回顾:

(10条消息) 保姆级爬虫零基础一条龙式教程(超详细)_代码骑士的博客-CSDN博客爬虫保姆级教程2:在visual studio中使用python项目连接SQLite数据库--爬虫数据保存之数据库https://blog.csdn.net/qq_51701007/article/details/124301264?spm=1001.2014.3001.5502 ;

将爬取到的信息存储进数据库:

修改部分:

#数据库初始化
def init_db(dbpath):
    #创建数据表
    sql = '''
        create table movieTop250
        (
            id integer primary key autoincrement,
            info_link text,
            pic_link text,
            cname varchar,
            ename varchar,
            score numeric,
            rated numeric,
            instroduction text,
            info text
        )

    '''
    conn = sqlite3.connect(dbpath)
    cursor = conn.cursor()#获取游标
    cursor.execute(sql)
    conn.commit()
    conn.close()

#保存到数据库
def saveDataToDB(datalist,dbpath):
    init_db(dbpath)
    conn = sqlite3.connect(dbpath)
    cur = conn.cursor()

    for data in datalist:
        for index in range(len(data)):
            if index == 4 or index == 5:
                continue
            data[index] = '"'+data[index]+'"'
        sql='''
            insert
            into
            movieTop250(info_link,pic_link,cname,ename,score,rated,instroduction,info)
            values(%s)'''%",".join(data)
        #print(sql)
        cur.execute(sql)
        conn.commit()
    cur.close()
    conn.close()

完整代码:

import urllib.request as ur
import urllib.error as ue
import urllib.parse as up
from bs4 import BeautifulSoup
import re
import sqlite3

#创建正则表达式
#影片链接
findLink=re.compile(r'')#(.*?):.*:任意字符出现多次 ?:前面的元组内容出现仅出现一次
#影片图片
findImagSrc=re.compile(r'(.*)')
#评分
findRating = re.compile(r'(.*)')
#评价人数
findJudge = re.compile(r'(\d*)人评价')
#找到概况
findInq = re.compile(r'(.*)')
#相关内容
findBd = re.compile(r'(.*?)',re.S)

def main():
    baseurl = "https://movie.douban.com/top250?start="
    datalist = getData(baseurl)
    dbpath = "moveTop.db"
    saveDataToDB(datalist,dbpath)

#得到一个指定的URL内容
def askURL(url):
    #模拟请求头
    header = {"Remote Address":"140.143.177.206:443","User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36"}
    #保存网页信息的字符串
    html=""
    #请求网页信息
    req = ur.Request(url,headers=header)
    try:
        res = ur.urlopen(req)
        html=res.read().decode("utf-8")
        #print(html)
    except ue.URLError as e:
        if hasattr(e,"code"):
            print(e.code)
        if hasattr(e,"reason"):
            print(e.reason)
    return html

#爬取网页
def getData(baseurl):
    dataList = []#用来存储网页信息
    for i in range(0,10):#调用获取页面信息函数10次250条
        url = baseurl+str(i*25)#左闭右开
        html = askURL(url)#保存获取到的网页源码
        #逐一解析
        soup = BeautifulSoup(html,"html.parser")
        for item in soup.find_all('div',class_="item"):#查找比较好的字符串放入列表
            #print(item) 测试:查看电影item全部信息
            data = [] #保存一部电影的所有信息
            item = str(item)
             #影片详情链接
            Link = re.findall(findLink,item)[0]#re库用来通过正则表达式查找指定字符串,0表示只要第一次找到的
            data.append(Link)
            ImagSrc = re.findall(findImagSrc,item)[0]
            data.append(ImagSrc)
            Title = re.findall(findTitle,item)#区分中英文
            if len(Title)==2:
                ctitle=Title[0]
                data.append(ctitle)
                otitle = Title[1].replace("/","")#去掉无关符号
                data.append(otitle)#添加外国名
            else:
                data.append(Title[0])
                data.append(' ')#表中留空
            Rating = re.findall(findRating,item)[0]
            data.append(Rating)
            Judge = re.findall(findJudge,item)[0]
            data.append(Judge)
            Inq = re.findall(findInq,item)
            if len(Inq)!=0:
                Inq=Inq[0].replace("。","")#去掉句号
                data.append(Inq)
            else:
                data.append(" ")#表留空
            Bd = re.findall(findBd,item)[0]
            Bd = re.sub('(\s+)?'," ",Bd)#去掉
            Bd = re.sub('/'," ",Bd)#去掉/
            data.append(Bd.strip())#去掉前后空格
            dataList.append(data)#把处理好的一部电影信息放入dataList

    return dataList

#数据库初始化
def init_db(dbpath):
    #创建数据表
    sql = '''
        create table movieTop250
        (
            id integer primary key autoincrement,
            info_link text,
            pic_link text,
            cname varchar,
            ename varchar,
            score numeric,
            rated numeric,
            instroduction text,
            info text
        )

    '''
    conn = sqlite3.connect(dbpath)
    cursor = conn.cursor()#获取游标
    cursor.execute(sql)
    conn.commit()
    conn.close()

#保存到数据库
def saveDataToDB(datalist,dbpath):
    init_db(dbpath)
    conn = sqlite3.connect(dbpath)
    cur = conn.cursor()

    for data in datalist:
        for index in range(len(data)):
            if index == 4 or index == 5:
                continue
            data[index] = '"'+data[index]+'"'
        sql='''
            insert
            into
            movieTop250(info_link,pic_link,cname,ename,score,rated,instroduction,info)
            values(%s)'''%",".join(data)
        #print(sql)
        cur.execute(sql)
        conn.commit()
    cur.close()
    conn.close()

if __name__ == "__main__":
    main()
    print("爬取成功!")

输出结果:

查看数据库:

爬虫保姆级教程2:在visual studio中使用python项目连接SQLite数据库--爬虫数据保存之数据库

Original: https://blog.csdn.net/qq_51701007/article/details/124362031
Author: 代码骑士
Title: 爬虫保姆级教程2:在visual studio中使用python项目连接SQLite数据库–爬虫数据保存之数据库

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/815365/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球