python爬虫获取豆瓣Top250的前50名电影的信息

运行结果截图

(可视化还没完成)

会得到获取成功的截图,对其进行增删改查都是可以的,输入不合法不会报错,但会提示

用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()

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值