首页 > 编程语言 >爬取 【豆瓣电影top250数据】 python代码

爬取 【豆瓣电影top250数据】 python代码

时间:2024-02-08 10:44:49浏览次数:26  
标签:python movie self 电影 data 爬取 url top250

import requests
import openpyxl
import re
import time
import pymysql
class DoubanSpider:
    def __init__(self):
        self.url_temp = "https://movie.douban.com/top250?start={}"
        self.headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0'}
        self.movie_data = []

    #获取电影数据
    def get_movie_data(self):
        i = 1
        for url in url_list:
            response = requests.get(url, headers=self.headers)
            text = response.text

            pattern = re.compile(r'<span class="title">(.*?)</span>.*?<p class="">\n\s*(.*?)<br>.*?<span class="rating_num" property="v:average">(.*?)</span>.*?<span>\d*人评价</span>\s*</div>\s*(.*?)</div>',re.S)
            items = re.findall(pattern, text)

            self.movie_data.append([{'电影名称': item[0], '导演与主演':  re.sub('&nbsp;', '', item[1]) ,
                     '电影评分': item[2], '电影引言': re.sub(r'<p class="quote">\s*<span class="inq">(.*?)</span>\s*</p>\s*',r'\1',item[3] if item[3] else '无')} for item in items])

            print('----第{}页----'.format(i))
            i = i+1
            time.sleep(1)
        print(self.movie_data)

    #存入excel
    def save_to_excel(self,wb):
        ws = wb.active
        ws.append(['电影名称', '导演与主演', '电影评分', '电影引言'])

        for movielist in self.movie_data:
            for movie in movielist:
                ws.append([movie['电影名称'], movie['导演与主演'], movie['电影评分'], movie['电影引言']])

        wb.save('douban_top250.xlsx')
        wb.close()

    # 存入数据库
    def save_to_sql(self):
        # 连接数据库
        try:
            conn = pymysql.connect(host='localhost',port=3306, user='root', password='yourpassword', db='dbtest')
            print('数据库成功连接')
            cursor = conn.cursor()
            # 创建movies表
            create_table_sql = '''CREATE TABLE IF NOT EXISTS movies (
                       id INT PRIMARY KEY AUTO_INCREMENT,   
                       title VARCHAR(20),
                       director VARCHAR(100),
                       score FLOAT,
                       rate VARCHAR(100)
                   );'''

            cursor.execute(create_table_sql)

            # 插入数据库
            insert_sql = '''
                   INSERT INTO movies (title, director, score, rate) VALUES (%s, %s, %s, %s)
                   '''
            for movielist in self.movie_data:
                for movie in movielist:
                    cursor.execute(insert_sql,
                               (movie['电影名称'], movie['导演与主演'], movie['电影评分'], movie['电影引言']))

            # 提交并关闭连接
            conn.commit()
            cursor.close()
            conn.close()

        except pymysql.Error:
            print('数据库无法连接')


if __name__ == '__main__':
    dbspider = DoubanSpider()
    url_list = [dbspider.url_temp.format(i*25) for i in range(10)]   #url列表
    dbspider.get_movie_data()
    wb = openpyxl.load_workbook('douban_top250.xlsx')      # douban_top250.xlsx表格
    dbspider.save_to_excel(wb)
    #dbspider.save_to_sql()

存入douban_top250.xlsx表格的一部分数据……:

………………

标签:python,movie,self,电影,data,爬取,url,top250
From: https://www.cnblogs.com/1019-Yan/p/18011646

相关文章

  • 用python写一个并发测试工具
    工作中会有一些需要并发测试的场景,例如:两人同时操作一条数据,此时需要验证结果是否符合预期 最初是借助jmeter来进行并发测试,建2个线程组,每个线程组中各放一个接口,启动时会同时执行个线程组中的接口,从而实现并发测试的目的但是每次都要打开jmeter,用起来不太方便,所以就尝试用pyt......
  • Python监控服务器
    Python代码如下: importpsutilimporttimeimportpymysqldb=pymysql.connect(user="root",passwd="root",db="test",host="127.0.0.1")db.autocommit(True)cur=db.cursor()defgetinfo():mem=psutil.virtua......
  • Ubuntu源码安装Python
    Ubuntu源码安装Python目前Ubuntu电脑需要升级Python,但根据源来升级,会出现报错,故记录用源码升级的方法。从官方链接下载源码:https://www.python.org/downloads/source/根据自己需求下载对应版本即可。这里笔者下载的是Python-3.10.0rc2.tgz解压:tar-zxvfPython-3.10.0rc......
  • Python实现软件设计模式9:组合模式 Composite Pattern
    动机如何将容器和叶子进行递归组合,使得用户在使用时无须对它们进行区分,可以一致地对待容器和叶子?典型案例如:文件系统,在树形目录结构中,包含文件和文件夹两类不同的元素;在文件夹中可以继续包含文件或子文件夹,在文件中不能再包含子文件或者子文件夹。概念组合多个对象形成树形......
  • 【视频】小甲鱼零基础入门学习Python(全96集)
    视频下载地址:https://pan.quark.cn/s/c17e3da33a76目录1.第一讲:我和Python的第一次亲密接触2.第二讲:用Python设计第一个游戏3.第三讲:小插曲之变量和字符串4.第四讲:改进我们的小游戏5.第五讲:Python的数据类型6.第六讲:常用的操作符7.第七-九讲:了不起的分支和循环8.第十讲:一个......
  • [python3]: python --【class】类变量(类属性)
    [python3]: python --【class】类变量(类属性)    一、说明: 1、类变量:类变量,定义在【类内】且【函数外】。1classobject:23#class_variable4icount=0567def__init__(self):8#usingclass_vari......
  • Python 获取相对路径
    想要获取当前文件的路径,通常我的做法是os.path.abspath(__file__)如果想要获取当前文件的所在文件夹,通常的做法是os.path.dirname(__file__)但是更多的时候,我想获取当前所在文件的父目录的父目录,做法可以是os.path.dirname(os.path.diranme(__file__))或path=os.path......
  • 02 在vscode中使用python
    安装插件需要先安装python这个插件安装完成后,创建一个文件夹,用于工程的创建。使用vscode打开这个文件夹,之后新建一个.py文件。编写第一个程序:print("hello")a=3b=4print(a+b)box="gogogo"name="lili"print("byby"+name)配置相关信息选择这个:......
  • Python中的包模块引用成员的方法
    在Python中,包(package)和模块(module)是组织和管理代码的重要方式。将代码分成不同的模块或包可以更好地组织代码结构,使代码更易于维护和管理。说的通俗点,就是将代码整理成一块一块,然后使用时候相互拼接完成就可以使用,这样的好处是可用性高而且非常方便维护,尤其是在选择大型爬虫项目的......
  • Python编写游戏有什么注意
    使用 Python 编写游戏时,有以下几个注意事项:游戏逻辑和设计:明确游戏的核心逻辑和目标,设计游戏的规则、关卡和玩家交互方式。图形和用户界面:如果需要图形界面,可以考虑使用游戏开发库,如Pygame、Pyglet或 Pygame Zero。性能优化:注意优化代码的性能,尤其是在处理复杂图形或大量数据......