【python爬虫】豆瓣爬虫学习

文章目录

  • 网页地址
  • 爬虫目标
  • 技术栈
  • 爬虫代码
  • 注意事项


Python爬虫学习:我们可以选择一个相对简单的网站进行数据抓取。这里以抓取“豆瓣电影Top250”的信息为例,这个网站提供了丰富的电影数据,包括电影名称、评分、导演、演员等信息。
在这里插入图片描述

网页地址

  • https://movie.douban.com/top250

爬虫目标

  • 抓取每部电影的名称、评分、简介和前几位主演的名字。

技术栈

  1. Python 3.x
  2. requests:用于发送HTTP请求。
  3. BeautifulSoup4:用于解析HTML文档。

爬虫代码

首先,确保你已经安装了requestsbeautifulsoup4库,如果没有安装,可以通过以下命令安装:

pip install requests beautifulsoup4

以下是完整的爬虫代码:

# 导入requests库用于发送HTTP请求
import requests
# 导入BeautifulSoup库用于解析HTML文档
from bs4 import BeautifulSoup# 定义一个函数用于获取电影数据
def fetch_movie_data():# 设置请求的URL,这里是豆瓣电影Top 250的页面url = "https://movie.douban.com/top250"# 设置请求头,伪装成浏览器访问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.3'}# 发送GET请求,获取页面内容response = requests.get(url, headers=headers)# 使用BeautifulSoup解析获取到的页面内容soup = BeautifulSoup(response.text, 'html.parser')# 查找页面中所有的电影条目movies = soup.find_all('div', class_='item')# 遍历每部电影条目for movie in movies:# 提取电影标题title = movie.find('span', class_='title').text# 提取电影评分rating = movie.find('span', class_='rating_num').text# 提取电影的详细信息,这里只取第一行info = movie.find('div', class_='bd').find('p').text.strip().split('\n')[0]# 提取主演信息,可能有多个主演,通过分割和筛选获取actors = [actor.strip() for actor in info.split('/') if actor.strip().startswith('主演')]# 如果有主演信息,去除'主演:'并用逗号连接,否则显示'N/A'actors = ', '.join(actors).replace('主演:', '') if actors else 'N/A'# 打印电影的标题、评分和主演信息print(f"Title: {title}")print(f"Rating: {rating}")print(f"Actors: {actors}\n")# 判断是否是直接运行此脚本,如果是,则调用fetch_movie_data函数
if __name__ == "__main__":fetch_movie_data()

在这里插入图片描述

代码解释:

这段Python代码定义了一个函数fetch_movie_data()用于从豆瓣电影Top250页面抓取电影数据,包括电影标题、评分以及主演信息,并打印这些信息。

下面是代码的详细解释:

  1. 导入必要的库

    • requests:用于发送HTTP请求。
    • BeautifulSoup:用于解析HTML文档。
  2. 定义fetch_movie_data函数

    • 设置目标URL为豆瓣电影Top250页面。
    • 设置请求头headers,其中包含一个模拟浏览器的User-Agent字符串,这是为了绕过网站可能的反爬虫机制。
  3. 发送GET请求并解析HTML

    • 使用requests.get方法发送GET请求到指定URL,获取响应文本。
    • 使用BeautifulSoup解析响应文本,创建一个soup对象,这个对象可以用来解析和提取HTML元素。
  4. 提取电影信息

    • 使用soup.find_all找到所有的电影条目,每个电影条目是一个div标签,类名为item
    • 对于每部电影,使用find方法来查找特定的信息:
      • 电影名称:查找类名titlespan标签。
      • 评分:查找类名rating_numspan标签。
      • 信息:查找div标签下的p标签,此标签通常包含电影的年份、国家、类型及演员等信息。
    • info中提取主演信息,通过查找以“主演”开始的字符串,然后去除“主演:”,并将所有主演名字用逗号连接起来。
  5. 打印电影信息

    • 打印电影标题、评分和主演信息。
  6. 执行函数

    • __main__模块下调用fetch_movie_data函数,执行抓取和打印操作。

注意事项

  1. 遵守网站规则:在实际操作中,请确保你的行为符合目标网站的robots.txt文件规定,不要对服务器造成过大负担。
  2. 动态加载内容:有些网站使用JavaScript动态加载内容,这可能需要使用如Selenium这样的工具来模拟浏览器行为。
  3. 错误处理:在实际应用中,应加入更完善的错误处理机制,比如重试策略、超时设置等。

漠漠水田飞白鹭,阴阴夏木啭黄鹂。

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

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

相关文章

AI大模型技术在音乐创造的应用前景

大模型技术在音乐创作领域具有广阔的应用前景,可以为音乐家、作曲家和音乐爱好者提供以下方面的帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 音乐创作辅助:大模型可以帮助音乐家和作曲家生成旋律、和声…

算法金 | 协方差、方差、标准差、协方差矩阵

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 抱个拳,送个礼 1. 方差 方差是统计学中用来度量一组数据分散程度的重要指标。它反映了数据点与其均值之间的偏离程度。在…

Flask无法Debug

问题描述 Flask Debug的时候,可能会无法进入断点。我使用的是pycharm CE版本。 解决方案 确保pycharm安装路径不带空格。(带空格路径导致debug程序启动报错)Gevent compatible,这个东西老的pycharm版本必须勾选它,新…

中霖教育靠谱吗?在职备考一建好通过吗?

中霖教育靠谱吗?在职备考一建好通过吗? 课程设置:报名后会进行测评,了解学员的知识掌握情况、时间安排和记忆思维特点等,制定更适合的学习计划。 课程以考试通过为目标,去繁化简,只讲有用的干货,帮助快…

VLOOKUP函数在表格的简单运用-两个表匹配

1.什么是VLOOKUP? VLOOKUP是Excel中的一个内置函数,主要用于在区域或表格的首列查找指定的值,并返回该行中其他列的值。它特别适用于跨表格数据匹配 2.函数运用 2.1.这边两个表取名a表和b表,做为我们的实例表。 表格a包含&…

Search for documents with similar texts

题意:搜索具有相似文本的文档 问题背景: I have a document with three attributes: tags, location, and text. 我有一份文档,包含三个属性:标签、位置和文本。 Currently, I am indexing all of them using LangChain/pgvecto…

快速了解《大模型赋能下的AI2.0数字人平台》白皮书

在生成式AI和大模型的赋能下,数字人迎来AI 2.0时代。它能否成为每个人的“数字分身”,转化为新型的AI劳动力工具?商汤科技与上海市人工智能技术协会、零壹智库、增强现实核心技术产业联盟联合发布《大模型赋能下的AI 2.0数字人平台》。《白皮…

【D3.js in Action 3 精译】1.2.2 可缩放矢量图形(二)

当前内容所在位置 第一部分 D3.js 基础知识 第一章 D3.js 简介 1.1 何为 D3.js?1.2 D3 生态系统——入门须知 1.2.1 HTML 与 DOM1.2.2 SVG - 可缩放矢量图形 ✔️ 第一部分【第二部分】✔️第三部分(精译中 ⏳) 1.2.3 Canvas 与 WebGL&#x…

读AI新生:破解人机共存密码笔记16对人工智能的治理

1. 愚蠢的、情绪化的人类 1.1. 与完美理性所设定的不可企及的标准相比,我们都是极其愚蠢的,我们受制于各种情绪的起伏,这些情绪在很大程度上支配着我们的行为 1.2. 为了充分了解人类的认知,我们(或者更确切地说&…

ORA-01775: 同义词的循环链问题

一、问题描述 ORA-01775: 同义词的循环链问题 二、 原因分析 同义词对应的对象(表等)已删除,不存在了。 可能原因: 删除数据库对象,但是忘记删除同义词。删除一个用户,但忘记删除此用户中相关的同义词…

@Param参数

Param参数 当方法参数大于两个的时候必须传递,只有一个的时候可以不传。大于两个的时候也可以用#{arg0}和#{arg1}。。。来取值 Param()括号里面的值对应sql语句中 # {} 里面的值 看AI的解释

模版方法模式详解:使用和实现的指南

目录 模版方法模式模版方法模式结构模版方法模式适合应用场景模版方法模式优缺点练手题目题目描述输入描述输出描述题解 模版方法模式 模板方法模式是一种行为设计模式, 它在超类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步…

《昇思25天学习打卡营第3天|张量 Tensor》

文章目录 前言:今日所学:1. 创建张量2. 张量的属性3.张量索引与运算4. NumPy与Tensor的转换5. 稀疏张量 前言: 张量?张亮?张量是什么? 张量是一个可以用来表示在一些矢量、标量和其他张量之间的线性关系的…

leetcode 第133场双周赛 100333.统计逆序对的数目【计数dp/滚动数组/前缀和优化】

分析: 先考虑如下问题。 求长度为n,逆序对为m的排列数量。 可以考虑dp,dp[i][j]定义为长度为i,逆序对为j的排列数量。 dp[1][0] 1; //枚举排列长度,或者认为枚举当前需要插到长度为i-1的排列中的数字 for(int i 1…

OpenAI封杀不支持地区API:违规封号,7月9日生效

OpenAI 在检测用户使用其 API 的地区后,提示所有不支持位置的用户 昨晚,很多大模型应用的开发者、程序员都收到了 OpenAI 的警告信,心里一惊。 OpenAI 在检测用户使用其 API 的地区后,提示所有不支持位置的用户:即将封…

图书管理系统(附源码)

前言:前面一起和小伙伴们学习了较为完整的Java语法体系,那么本篇将运用这些知识连串在一起实现图书管理系统。 目录 一、总体设计 二、书籍与书架 书籍(Book) 书架(Booklist) 三、对图书的相关操作 I…

已解决问题 | 该扩展程序未列在 Chrome 网上应用店中,并可能是在您不知情的情况下添加的

在Chrome浏览器中,如果你看到“该扩展程序未列在 Chrome 网上应用店中,并可能是在您不知情的情况下添加的”这样的提示,通常是因为该扩展程序没有通过Chrome网上应用店进行安装。以下是解决这个问题的步骤: 解决办法:…

kali/ubuntu安装vulhub

无须更换源,安装docker-compose apt install docker.io docker -vdocker-compose #提示没有,输入y安装mkdir -p /etc/docker vi /etc/docker/daemon.json #更换dockerhub国内源┌──(root㉿kali)-[/home/kali/vulhub-master/tomcat/CVE-2017-12615] …

dledger原理源码分析系列(三)-选主

简介 dledger是openmessaging的一个组件, raft算法实现,用于分布式日志,本系列分析dledger如何实现raft概念,以及dledger在rocketmq的应用 本系列使用dledger v0.40 本文分析dledger的选主 关键词 Raft Openmessaging 心跳/选…

Linux安装redis教程(超级详细,新手必看)

环境: Centos 7.9 一、安装准备工作 1.配置gcc 安装redis前需要配置gcc: yum install gcc如果配置gcc出现依赖包问题,可以到主页查看帖子解决:https://blog.csdn.net/m0_59117906/article/details/134451622?spm1001.2014.300…