当前位置: 首页 > news >正文

python爬虫豆瓣电影TOP250

以下代码是一个简单的网络爬虫程序,用于从豆瓣电影 Top250 页面获取电影信息并保存到 CSV 文件中。以下是代码的一些主要步骤和功能:

  1. 导入模块:代码开始部分导入了 requests 和 etree 模块用于网络请求和数据解析。

  2. get_html(start) 函数:这个函数用于发起网络请求,获取豆瓣电影 Top250 页面中每页的电影数据。它通过 XPath 解析页面内容,提取电影的标题、链接、导演、评分、评分人数和概要等信息,并调用 save_data() 函数保存到 CSV 文件中。

  3. save_data() 函数:保存电影信息到 CSV 文件中。

  4. 程序入口 if __name__ == '__main__': 部分:在这里,程序会创建或清空一个名为“豆瓣TOP250.csv”的 CSV 文件并写入表头,“名称,网址,导演,评分,评分人数,概要”。然后,循环遍历 Top250 页面的不同部分,并调用 get_html() 函数来获取数据并保存到 CSV 文件中。

  5. 数据清洗与处理:代码中还包含了一些数据清洗和处理的步骤,如读取 CSV 文件、处理缺失值、转换数据类型、处理异常值、数据去重和保存清洗后的数据到csv文件中。

    # 导入模块
    import requests  # 网络请求模块
    from lxml import etree  # 数据解析模块# 发起网络请求
    def get_html(start):print('正在爬取', start)url = f'https://movie.douban.com/top250?start={start}&filter='# 请求头信息,防止反爬虫操作headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0'}res = requests.get(url=url, headers=headers)print(res.status_code)html = etree.HTML(res.text)lis = html.xpath('//*[@id="content"]/div/div[1]/ol/li')# 解析数据(xpath解析)for li in lis:title = ''.join(li.xpath('./div/div[2]/div[1]/a/span[1]/text()')).replace('\n', '').replace(' ', '')src = ''.join(li.xpath('./div/div[2]/div[1]/a/@href')).replace('\n', '').replace(' ', '')dictor = ''.join(li.xpath('./div/div[2]/div[2]/p[1]/text()')).replace('\n', '').replace(' ', '')score = ''.join(li.xpath('./div/div[2]/div[2]/div/span[2]/text()')).replace('\n', '').replace(' ', '')comment = ''.join(li.xpath('./div/div[2]/div[2]/div/span[4]/text()')).replace('\n', '').replace(' ', '')summary = ''.join(li.xpath('./div/div[2]/div[2]/p[2]/span/text()')).replace('\n', '').replace(' ', '')# movies.append({#   'title':title,#  'src':src,# 'score':score,# 'comment':comment,# 'summary':summary,# })save_data(title, src, dictor, score, comment, summary)# print(title,src,dictor,score,comment,summary)def save_data(title, src, dictor, score, comment, summary):with open('./豆瓣TOP250.csv', 'a+', encoding='utf-8-sig') as f:movies_info = f'{title},{src},{dictor},{score},{comment},{summary}\n'f.write(movies_info)if __name__ == '__main__':with open('./豆瓣TOP250.csv', 'a+', encoding='utf-8-sig') as f:head = '名称,网址,导演,评分,评分人数,概要\n'f.write(head)for start in range(0, 250, 25):get_html(start)import pandas as pd
    # 读取数据
    df = pd.read_csv('豆瓣TOP250.csv')
    # 查看数据信息
    print(df.info())
    # 处理缺失值
    df.dropna(inplace=True)
    # 转换数据类型
    df['评分'] = df['评分'].astype(float)
    # 处理异常值
    df = df[df['评分'] >= 0 & df['评分'] <= 10]
    # 数据去重
    df.drop_duplicates(inplace=True)
    # 保存清洗后的数据
    df.to_csv('豆瓣TOP250.csv', index=False)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • FakeNewsGPT4:通过知识增强的大规模视觉语言模型推进多模态假新闻检测
  • Python和C++骨髓细胞进化解析数学模型
  • prometheus+grafana应用监控配置
  • 基于springboot+vue+uniapp的超市购物系统小程序
  • 【Java--数据结构】二叉树oj题(上)
  • Nuxt.js头部魔法:轻松自定义页面元信息,提升用户体验
  • LeetCode 92. 反转链表 II
  • Hi3861 OpenHarmony嵌入式应用入门--华为 IoTDA 设备接入
  • 堆、栈和队列(数据结构)
  • PGCCC|【PostgreSQL】PCA+PCP+PCM等IT类认证申报个税退税指南
  • 【mysql】02在ubuntu24安装并配置mysql
  • 【区块链 + 智慧政务】澳门:智慧城市建设之证书电子化项目 | FISCO BCOS应用案例
  • 单元测试有什么好处呢?
  • 【代码随想录_Day30】1049. 最后一块石头的重量 II 494. 目标和 474.一和零
  • SpringBoot集成Sharding-JDBC-5.3.0实现按月动态建表分表
  • 分享一款快速APP功能测试工具
  • 78. Subsets
  • Android系统模拟器绘制实现概述
  • CentOS7 安装JDK
  • CSS魔法堂:Absolute Positioning就这个样
  • Debian下无root权限使用Python访问Oracle
  • express如何解决request entity too large问题
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • java 多线程基础, 我觉得还是有必要看看的
  • Java知识点总结(JavaIO-打印流)
  • PHP 的 SAPI 是个什么东西
  • php的插入排序,通过双层for循环
  • Shell编程
  • spring boot 整合mybatis 无法输出sql的问题
  • 从0实现一个tiny react(三)生命周期
  • 大主子表关联的性能优化方法
  • 微信小程序填坑清单
  • 小试R空间处理新库sf
  • 译米田引理
  • 转载:[译] 内容加速黑科技趣谈
  • nb
  • 函数计算新功能-----支持C#函数
  • 积累各种好的链接
  • ​flutter 代码混淆
  • ​香农与信息论三大定律
  • ​学习笔记——动态路由——IS-IS中间系统到中间系统(报文/TLV)​
  • ###C语言程序设计-----C语言学习(3)#
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • $$$$GB2312-80区位编码表$$$$
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (20050108)又读《平凡的世界》
  • (js)循环条件满足时终止循环
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (void) (_x == _y)的作用
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (一) 初入MySQL 【认识和部署】
  • (转) Face-Resources