Python网络爬虫实践案例:爬取猫眼电影Top100

以下是一个Python网络爬虫的实践案例,该案例将演示如何使用Python爬取猫眼电影Top100的电影名称、主演和上映时间等信息,并将这些信息保存到TXT文件中。此案例使用了requests库来发送HTTP请求,使用re库进行正则表达式匹配,并包含详细的代码解释,以确保代码可以直接运行。

1. 准备工作

在开始之前,我们需要确保已经安装了requests库。我们可以使用以下命令进行安装:

bash复制代码pip install requests

2.猫眼电影Top100的信息是从哪些页面爬取的呢

猫眼电影Top100的信息是从猫眼电影的官方网站(如 https://maoyan.com/board/4 )爬取的。具体来说,这个页面展示了猫眼电影Top100的榜单,包含了电影的排名、名称、主演、上映时间、评分等详细信息。

在爬取过程中,爬虫程序会模拟浏览器行为发送HTTP请求到该页面的URL,并接收服务器返回的HTML内容。然后,程序会使用正则表达式或解析库(如BeautifulSoup、lxml等)来解析HTML内容,提取出所需的信息(如电影名称、主演、上映时间等)。

由于猫眼电影的页面结构和反爬虫机制可能会发生变化,因此在实际应用中,爬虫程序可能需要根据实际情况进行调整和优化。此外,爬取网站数据时应遵守相关法律法规和网站的使用协议,不得用于非法用途。

需要注意的是,由于猫眼电影Top100的榜单是动态变化的,因此爬取到的信息可能只是某一时刻的快照。如果需要获取最新或实时的榜单信息,爬虫程序需要定期运行并更新数据。

3. 代码实现

以下是完整的代码示例:

import requests
import re# 请求URL
url = 'https://maoyan.com/board/4'# 请求头部,模拟浏览器请求
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
}# 解析页面函数
def parse_html(html):# 使用正则表达式匹配电影信息pattern = re.compile(r'<p class="name"><a href=".*?" title="(.*?)" data-act="boarditem-click" data-val="{movieId:\\\d+}">(.*?)</a></p>.*?<p class="star">(.*?)</p>.*?<p class="releasetime">(.*?)</p>', re.S)items = re.findall(pattern, html)# 将匹配到的信息转换为字典格式for item in items:yield {'电影名称': item[1],'主演': item[2].strip(),'上映时间': item[3]}# 保存数据函数
def save_data():# 打开文件准备写入f = open('maoyan_top100.txt', 'w', encoding='utf-8')# 分页爬取数据,每页10条for i in range(10):# 构建分页URLpage_url = f'https://maoyan.com/board/4?offset={i*10}'# 发送HTTP请求获取页面内容response = requests.get(page_url, headers=headers)# 解析页面内容for item in parse_html(response.text):# 将信息写入文件f.write(str(item) + '\n')# 关闭文件f.close()# 主函数
if __name__ == '__main__':save_data()

4. 代码解释

  • 请求URL和头部:定义了要爬取的猫眼电影Top100的URL和请求头部,模拟浏览器请求以避免被反爬虫机制拦截。
  • 解析页面函数parse_html函数使用正则表达式匹配页面中的电影信息,包括电影名称、主演和上映时间。正则表达式中的re.S标志表示让.匹配包括换行符在内的所有字符。
  • 保存数据函数save_data函数负责分页爬取数据,并将解析到的信息写入TXT文件中。通过循环10次,每次构建分页URL并发送请求,然后解析页面内容并写入文件。
  • 主函数:在__main__块中调用save_data函数开始爬取数据。

5.代码中包含了其他的功能模块

在提供的代码中,虽然主要功能是爬取猫眼电影Top100的信息,但代码结构本身也体现了几个关键的功能模块。这些模块使得代码更加清晰、易于维护和扩展。以下是代码中包含的其他功能模块:

(1)请求发送模块:

  • 使用requests.get函数发送HTTP GET请求到指定的URL。
  • 通过headers参数设置请求头部,以模拟浏览器行为。

(2)页面解析模块(parse_html函数):

  • 使用正则表达式(re.compilere.findall)解析HTML内容,提取所需信息。
  • 正则表达式定义了要匹配的内容结构,包括电影名称、主演和上映时间等。
  • 将匹配到的信息以字典形式返回(通过生成器yield逐个返回,节省内存)。

(3)数据保存模块(save_data函数):

  • 负责将解析到的数据保存到文件中。
  • 实现了分页爬取,通过循环构建不同页面的URL并发送请求。
  • 将每条电影信息转换为字符串并写入文件,每条信息占一行。

(4)主程序模块(if name== main:部分):

  • 作为程序的入口点,调用save_data函数开始执行爬取任务。
  • 确保当该脚本作为主程序运行时才执行爬取操作,而当它被其他脚本导入时不会执行。

(5)错误处理模块(隐含):

  • 虽然代码中没有显式的try-except块来处理可能出现的异常(如网络请求失败、解析错误等),但在实际应用中,添加错误处理是非常重要的。
  • 可以通过添加异常处理来增强代码的健壮性和用户友好性。

(6)可扩展性模块(隐含):

  • 代码结构清晰,使得添加新功能(如爬取更多信息、支持其他网站等)变得相对容易。
  • 可以通过修改正则表达式、添加新的解析函数或数据保存逻辑来扩展代码的功能。

需要注意的是,虽然代码在结构上包含了这些模块,但在实际应用中可能还需要进一步完善,比如添加日志记录、优化正则表达式以提高解析效率、处理动态加载的内容(可能需要使用Selenium等工具)等。此外,由于网站结构和反爬虫机制的变化,代码可能需要根据实际情况进行调整。

6. 运行代码

将上述代码保存为一个Python文件(例如maoyan_spider.py),然后在命令行中运行该文件:

bash复制代码python maoyan_spider.py

运行完成后,我们会在当前目录下找到一个名为maoyan_top100.txt的文件,里面包含了猫眼电影Top100的电影名称、主演和上映时间等信息。

7.注意事项

  • 由于网站结构和反爬虫机制可能会发生变化,因此在实际应用中可能需要对代码进行相应的调整。
  • 爬取网站数据时应遵守相关法律法规和网站的使用协议,不得用于非法用途。

通过此案例,我们可以学习到如何使用Python进行网络爬虫的基本步骤和方法,包括发送HTTP请求、解析页面内容和保存数据等。希望这个案例对你有所帮助!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/476026.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI一键生成原创花卉印花图案——创新与效率的结合

引言 在时尚界&#xff0c;印花图案一直是设计师们表达创意和个性的重要手段。随着人工智能技术的发展&#xff0c;AI在设计领域的应用越来越广泛&#xff0c;其中就包括了一键生成原创花卉印花图案。本文将探讨AI如何帮助设计师们提高效率&#xff0c;同时保持设计的创新性和…

QT实操中遇到的一些(C++)疑惑点汇总

QT实操中 遇到的一些C疑惑点汇总 1.实例化对象的两种方法及其访问方式 1.1 示例 1.2 总结 2.基类成员的访问 2.1 直接访问继承的基类成员 2.1.1示例代码 2.1.2 输出结果 2.2 使用作用域解析符来显式调用基类成员函数 2.2.1 示例代码 2.2.2 输出结果 2.3 使用 this 指针访问基类…

图形学笔记 - 4. 几何 -网格操作和阴影映射

文章目录 网格操作&#xff1a;几何处理细分Loop细分Catmull-Clark细分&#xff08;一般网格&#xff09;网格简化 阴影 Shadows可视化阴影映射阴影映射阴影贴图的问题 网格操作&#xff1a;几何处理 网格细分网格简化网格正则化 网格细分&#xff08;上采样&#xff09; 网…

OBOO鸥柏车载广告屏:28.6寸液晶一体机的技术革新与应用前景

在数字化迅速发展的今天&#xff0c;OBOO鸥柏推出的28.6寸车载长条形液晶广告屏一体机成为了市场的一大亮点。这款产品不仅具有超窄边框的高亮设计&#xff0c;还利用异形激光切割技术&#xff0c;支持多种形状如圆形、方形及三角形展示&#xff0c;极大地提升了商用和工业屏幕…

Spring Cloud Alibaba、Spring Cloud 与 Spring Boot各版本的对应关系

参考spring-cloud-alibaba github wiki说明&#xff1a;版本说明 下面截取说明&#xff1a; 2022.x 分支 2021.x 分支 2.2.x 分支 组件版本关系

Springboot + vue 健身房管理系统项目部署

1、前言 ​ 许多人在拿到 Spring Boot 项目的源码后&#xff0c;不知道如何运行。我以 Spring Boot Vue 健身房管理系统的部署为例&#xff0c;详细介绍一下部署流程。大多数 Spring Boot 项目都可以通过这种方式部署&#xff0c;希望能帮助到大家。 ​ 2、项目查看 ​ 首…

SOL链上的 Meme 生态发展:从文化到创新的融合#dapp开发#

一、引言 随着区块链技术的不断发展&#xff0c;Meme 文化在去中心化领域逐渐崭露头角。从 Dogecoin 到 Shiba Inu&#xff0c;再到更多细分的 Meme 项目&#xff0c;这类基于网络文化的加密货币因其幽默和社区驱动力吸引了广泛关注。作为近年来备受瞩目的区块链平台之一&…

基于大数据爬虫数据挖掘技术+Python的网络用户购物行为分析与可视化平台(源码+论文+PPT+部署文档教程等)

#1024程序员节&#xff5c;征文# 博主介绍&#xff1a;CSDN毕设辅导第一人、全网粉丝50W,csdn特邀作者、博客专家、腾讯云社区合作讲师、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老…

主机管理工具 WGCLOUD v3.5.6 更新了哪些特性

WGCLOUD-v3.5.6 更新说明&#xff0c;2024-11-20发布 1. 新增&#xff0c;个性化采集&#xff0c;查看 2. 新增&#xff0c;支持达梦数据库做数据源来存贮监控数据&#xff0c;查看说明(8) 3. 新增&#xff0c;日志监控支持配置自动处理指令&#xff0c;当发现日志出现告警关键…

设计模式之 享元模式

享元模式&#xff08;Flyweight Pattern&#xff09;是一种结构型设计模式&#xff0c;用于减少系统中对象的数量&#xff0c;从而节省内存和提升性能。它通过共享相同的对象来避免重复创建类似的对象。该模式尤其适用于对象数量庞大、且重复内容较多的场景。 核心思想&#x…

yolov5 数据集分享:纯干货

数据集分享&#xff1a;纯干货 1. 遇见数据集&#xff1a;这是一个国内的数据集搜索引擎&#xff0c;索引了国内外的大部分网站&#xff0c;提供最新的数据集推荐。[遇见数据集网站](https://www.selectdataset.com/) 2. Kaggle&#xff1a;一个领先的数据科学和机器学习爱好者…

如何实现3D模型在线展示、互动和分享?

实现3D模型在线展示、互动和分享&#xff0c;可以通过多种途径和技术手段来完成。以下是一些具体的方法和步骤&#xff1a; 一、选择适合的3D模型展示平台 首先&#xff0c;你需要选择一个支持3D模型在线展示、互动和分享的平台。这些平台通常提供用户友好的界面和工具&#x…

大数据-227 离线数仓 - Flume 自定义拦截器(续接上节) 采集启动日志和事件日志

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; Java篇开始了&#xff01; 目前开始更新 MyBatis&#xff0c;一起深入浅出&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff0…

CANoe录制和回放CAN报文

目录 1、录制报文 2、离线回放 3、在线回放 3.1、在线回放设置 CANoe是一款用于汽车电子测试的工具&#xff0c;它可以模拟CAN网络中的各种设备&#xff0c;并支持CAN报文的录制和回放功能&#xff0c;方便我们远程调试。 1、录制报文 在Measurement Setupk面板点击Loggi…

大数据调度组件之Apache DolphinScheduler

Apache DolphinScheduler 是一个分布式易扩展的可视化 DAG 工作流任务调度系统。致力于解决数据处理流程中错综复杂的依赖关系&#xff0c;使调度系统在数据处理流程中开箱即用。 主要特性 易于部署&#xff0c;提供四种部署方式&#xff0c;包括Standalone、Cluster、Docker和…

XCode Build时遇到 .entitlements could not be opened 的问题

遇到错误 在构建成功的XCode工程上&#xff0c;手动打开XCode并Build&#xff0c;遇到以下问题&#xff1a; The file .entitlements could not be opened. Did you forget to declare this file as an output of a script phase or custom build rule which produces it 打…

关于一次开源java spring快速开发平台项目RuoYi部署的记录

关于一次开源java spring快速开发平台项目RuoYi部署的记录 本次因为需要一些练习环境&#xff0c;想要快速搭建一个javaweb 项目作为练习环境&#xff0c;经过查询和实验找到一个文档详细&#xff0c;搭建简单&#xff0c;架构也相对比较新的开源项目RuoYi。 项目介绍&#xf…

原生微信小程序在顶部胶囊左侧水平设置自定义导航兼容各种手机模型

无论是在什么手机机型下&#xff0c;自定义的导航都和右侧的胶囊水平一条线上。如图下 以上图iphone12&#xff0c;13PRo 以上图是没有带黑色扇帘的机型 以下是调试器看的wxml的代码展示 注意&#xff1a;红色阔里的是自定义导航&#xff08;或者其他的logo啊&#xff0c;返回之…

列出D3的所有交互方法,并给出示例

D3.js 提供了丰富的交互方法&#xff0c;可以用来增强图表的用户交互体验。以下是一些常用的交互方法及其示例&#xff1a; 1. 鼠标事件 on("mouseover", function) 用途: 当鼠标悬停在元素上时触发。示例:svg.selectAll(".bar").on("mouseover&qu…

小程序-使用 iconfont 图标库报错:Failed to load font

官方默认可以忽略此错误&#xff0c;在清除缓存后首次刷新会显示此错误&#xff0c;重新渲染错误消失 解决方法&#xff1a; 在 iconfont 图标库选择项目设置 选中 Base64 保存&#xff0c;重新点击链接 -> 复制代码到项目中 操作步骤&#xff1a;