运行结果截图
(可视化还没完成)
会得到获取成功的截图,对其进行增删改查都是可以的,输入不合法不会报错,但会提示
用Navicat Premium 16 查看数据库写入情况
完整代码
import requests
from bs4 import BeautifulSoup
import sqlite3
def get_movie(url):
# 发起HTTP请求
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36"
}
response = requests.get(url, headers=headers)
# 检查请求是否成功
if response.status_code != 200:
print("地址解析错误!!")
return None
# 解析HTML内容
soup = BeautifulSoup(response.text, 'html.parser') #html.parser解析器
# 获取电影信息
movie_info = []
for movie_tag in soup.find_all('div', class_='item'):
movie_name = movie_tag.find('span', class_='title').text
movie_rating = movie_tag.find('span', class_='rating_num').text
for i in movie_tag.find_all('div',class_='bd'):
movie_author = i.find('p',class_="").text
a = movie_author.replace('\n', '')
b = a.replace(' ', '')
c = b.replace('\xa0', ' ')
e = c.replace('导演:', '')
f = e.replace('主演:','')
g = f.split(' ')
movie_info.append((movie_name,movie_rating,g[0],g[3],g[5],g[7]))
return movie_info
def add_data(tag,name,score,dao,zhu,area,type):
cur.execute('INSERT INTO 电影表 (排名, 名字, 评分, 导演, 主演, 国家, 类型) VALUES (?,?,?,?,?,?,?)', (tag,name,score,dao,zhu,area,type))
conn.commit()
def zsgc():
while True:
print('1.增加信息 2.删除信息 3.修改信息 4.查找信息(q退出)')
a=input('输入功能:')
if a=='1':
x=input('输入排名,名字,评分,导演,主演, 国家, 类型进行添加:').split()
try:
cur.execute('INSERT INTO 电影表 (排名, 名字, 评分, 导演, 主演, 国家, 类型) VALUES (?,?,?,?,?,?,?)',
(x[0],x[1],x[2],x[3],x[4],x[5],x[6]))
conn.commit()
print('添加成功')
except:
conn.rollback() # 发生错误时回滚
print('输入错误(排名不能重复)!')
elif a=='2':
tag=input('输入要删除的作品排名:')
try:
conn.execute(f'delete from 电影表 where 排名={int(tag)}')
conn.commit()
print('删除成功')
except:
conn.rollback() # 发生错误时回滚
print('输入不合法')
elif a == '3':
try:
delete = int(input('输入要修改的作品排名:'))
new=input('输入排名,名字,评分,导演,主演,国家,类型 进行添加:').split()
if len(new)==7:
conn.execute('update 电影表 set 名字=? where 排名=?',(new[0],delete))
conn.execute('update 电影表 set 评分=? where 排名=?',(new[1],delete))
conn.execute('update 电影表 set 导演=? where 排名=?',(new[2],delete))
conn.execute('update 电影表 set 主演=? where 排名=?',(new[3],delete))
conn.execute('update 电影表 set 国家=? where 排名=?',(new[4],delete))
conn.execute('update 电影表 set 类型=? where 排名=?',(new[5],delete))
conn.commit()
print('修改成功')
except:
conn.rollback()#发生错误时回滚
print('输入不合法')
elif a == '4':
cur.execute(f'SELECT * FROM 电影表 ')
for i in cur.fetchall():
print(i)
elif a=='q':
break
else:
print('程序选择错误!')
if __name__ == "__main__":
conn = sqlite3.connect('电影.db')
cur = conn.cursor()
cur.execute('''
CREATE TABLE IF NOT EXISTS 电影表 (
排名 INTEGER PRIMARY KEY,
名字 TEXT,
评分 TEXT,
导演 TEXT,
主演 TEXT,
国家 TEXT,
类型 TEXT
)
''')
# 豆瓣电影Top50的URL
for i in range(2):
# 发现网址有规律,start都是25的倍数
url = 'https://movie.douban.com/top250?start={}&filter='.format(i * 25)
movie_info = get_movie(url) # 没找到返回None
# 打印并导入数据库电影信息
if movie_info:
j=i*25+1
for tag, (name,score,dao,zhu,area,type) in enumerate(movie_info,j):
add_data(tag,name,score,dao,zhu,area,type)
print(f"{tag}.电影名称:{name},评分:{score},导演:{dao},主演:{zhu},国家{area},类型{type} 添加成功!!")
else:
print("未获取到电影信息!!")
zsgc()#增删改查
conn.close()