爬虫案例—抓取豆瓣电影的电影名称、评分、简介、评价人数

爬虫案例—抓取豆瓣电影的电影名称、评分、简介、评价人数

豆瓣电影网址:https://movie.douban.com/top250

主页截图和要抓取的内容如下图:

Screenshot 2024-01-14 at 11.44.01

分析:

第一页的网址:https://movie.douban.com/top250?start=0&filter=

第二页的网址:https://movie.douban.com/top250?start=25&filter=

第三页的网址:https://movie.douban.com/top250?start=50&filter=

以此类推,不难发现页面的网址的start值与25多倍数有关。这样可以格式化网址为:f"https://movie.douban.com/top250?start={i*25}&filter="。

按F12进入浏览器的开发者模式,用xpath匹配到页面所有列表标签。如下图:

Screenshot 2024-01-14 at 12.24.48

进一步分析,进入li标签内,用xpath匹配到对应的电影标题和评分,评价人数。每部电影的详细简介在电影的浏览页面内,需要先获取到电影的href,然后再进行获取。

Screenshot 2024-01-14 at 12.34.19

其他内容的匹配与上图类似,不再赘述。

具体的代码如下:

import requests
from lxml import etree
import timeheaders = {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}# 获取页面响应内容函数
def get_page(url):res = requests.get(url, headers=headers)res.encoding = res.apparent_encodinghtml = res.content.decode() # 如果用res.text,某些页面的简介会返回乱码return html# 返回响应页面的所有电影列表标签
def get_li_lst(url):tree = etree.HTML(get_page(url))li_lst = tree.xpath('//ol/li')return li_lst# 获取电影名,评分,评价人数的函数
def get_page_datail(url):li_lst = get_li_lst(url)for li in li_lst:print('-' * 50)title = li.xpath('.//div[@class="hd"]/a/span[1]/text()')print('电影名:', title[0], end=' | ')score = li.xpath('./div[@class="item"]//div[@class="star"]/span[2]/text()')print('评分:', score[0], end=' | ')person_num = li.xpath('./div[@class="item"]//div[@class="star"]/span[4]/text()')print('评价人数:', person_num[0])movie_href = li.xpath('.//div[@class="hd"]/a/@href')[0]movie_html = get_page(movie_href)movie_tree = etree.HTML(movie_html)movie_short = movie_tree.xpath('//div[@class ="indent"]//span[@property="v:summary"]/text()')print('电影简介:')print(movie_short[0].strip())time.sleep(0.5)print('-' * 50)if __name__ == '__main__':page_num = int(input('请输入要获取的页码数: '))for i in range(page_num):print(f'第{i + 1}页电影数据:')new_url = f'https://movie.douban.com/top250?start={i * 25}'time.sleep(0.3)get_page_datail(new_url)print()

运行结果如下图:

Screenshot 2024-01-14 at 12.38.11

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

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

相关文章

时间差异导致数据缺失,如何调整Grafana时间与Prometheus保持同步?

Grafana时间如何调快或调慢? 在k8s环境中,常使用prometheusgrafana做监控组件,prometheus负责采集、存储数据,grafana负责监控数据的可视化。 在实际的使用中,有时会遇到这样的问题,k8s集群中的时间比真实…

unity C#中使用ref、out区别和使用案例

文章目录 ref 关键字out 关键字 在Unity(以及C#编程语言中), ref 和 out 都是用来传递参数的引用,这意味着它们允许函数修改实参变量,并且这些修改会反映到调用函数的地方。但它们之间确实存在一些关键区别和使用场景…

【数据结构 | 直接选择排序】

直接选择排序 基本思路直接插入排序SelectSort 基本思路 直接插入排序(StraightInsertionSort)的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。 我们可以同时从数组的头部和尾部同时进行排序工作…

Jenkins集成Sonar Qube

下载插件 重启Jenkins 容器 sonarqube 使用令牌 Jenkins 配置 重新构建

智能合约笔记

前言: 首先了解下为什么会出现智能合约,打个比方现在有两个人A和B打赌明天会不会下雨,每个人赌注100元,如果第二天下雨则A拿走200元,否则B拿走200元,这样就有一个问题,赌注要到第二天才能见效&…

每日一题——LeetCode1189.气球的最大数量

方法一 个人方法: 统计text字符串中b、a、l、o、n 这几个字符出现的次数 l和n需要两个才能拼成一个balloon,所以碰到l和o加1,其他字符加2 最后求出出现次数最少的那个字符再除以2就是能拼凑成的单词数量,避免出现小数要使用向下…

MySQL 从零开始:04 增删改查

文章目录 1、准备工作2、insert 增加数据2.1 添加所有列的数据2.2 添加部分列2.3 一次插入多条数据 3、delete 删除记录4、update 更新记录5、select 查询记录5.1 查询所有行所有列5.2 查询指定行的所有列5.3 查询所有行的指定列5.4 查询指定行的指定列 在上一小节中介绍了 MyS…

leetcode第365题:水壶问题

有两个水壶,容量分别为 jug1Capacity 和 jug2Capacity 升。水的供应是无限的。确定是否有可能使用这两个壶准确得到 targetCapacity 升。 如果可以得到 targetCapacity 升水,最后请用以上水壶中的一或两个来盛放取得的 targetCapacity 升水。 你可以&a…

C练习——杨辉三角

题目: 打印近似杨辉三角,行数n自选 百度找的杨辉三角,参考一下: 解析: 把它的全部元素左对齐,就可以看成近似杨辉三角的样子 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 …… 每个数等于它上方两数…

第一个 OpenGL 程序:旋转的立方体(VS2022 / MFC)

文章目录 OpenGL API开发环境在 MFC 中使用 OpenGL初始化 OpenGL绘制图形重置视口大小 创建 MFC 对话框项目添加 OpenGL 头文件和库文件初始化 OpenGL画一个正方形OpenGL 坐标系改变默认颜色 重置视口大小绘制立方体使用箭头按键旋转立方体深度测试添加纹理应用纹理换一个纹理 …

随笔03 笔记整理

图源:文心一言 关于我的考研与信息安全类博文整理~🥝🥝 第1版:整理考研类博文~🧩🧩 第2版:提前列出博文链接,以便小伙伴查阅~🧩🧩 第3版:整理We…

SLF4J Spring Boot日志框架

JAVA日志框架 JAVA有好多优秀的日志框架,比如log4j、log4j2、logback、JUL(java.util.logging)、JCL(JAVA Common Logging)等等,logback是后起之秀,是Spring Boot默认日志框架。 今天文章的目…

快速了解——逻辑回归及模型评估方法

一、逻辑回归 应用场景:解决二分类问题 1、sigmoid函数 1. 公式: 2. 作用:把 (-∞,∞) 映射到 (0, 1) 3. 数学性质:单调递增函数,拐点在x0,y0.5的位置 4. 导函数公式:f…

【镜像制作】OS云主机镜像的制作——以H3C为例

一、云主机镜像简介 1.云主机镜像 云主机镜像不同于容器镜像,是一个含有引导分区、操作系统以及必要应用的单一文件,可以理解成是对整个系统安装光盘所有数据的克隆文件。云用户在创建和申请云主机时可通过选择不同的镜像来快速获取相应操作…

一文读懂「Prompt Engineering」提示词工程

在了解提示过程之前,先了解一下什么是提示prompt,见最后附录部分 一、什么是Prompt Engingering? 提示工程(Prompt Engingering),也被称为上下文提示(In-Context Prompting)&#x…

Android的setContentView流程

一.Activity里面的mWindow是啥 在ActivityThread的performLaunchActivity方法里面: private Activity performLaunchActivity(ActivityClientRecord r, Intent customIntent) {ActivityInfo aInfo r.activityInfo;if (r.packageInfo null) {r.packageInfo getP…

常见面试题之CSS

CSS3的新特性 新增选择器::nth-child()、:first-of-type、:last-of-type等 弹性盒子:display: flex 媒体查询:media根据设备的特性和屏幕大小应用不同的样式规则 多列布局:column-count和column-with等属性可以实现将内容分为多…

SpringBoot读取配置文件中的内容

文章目录 1. 读取配置文件application.yml中内容的方法1.1 Environment1.2 Value注解1.3 ConfigurationProperties 注解1.4 PropertySources 注解,获取自定义配置文件中的内容,yml文件需要自行实现适配器1.5 YamlPropertiesFactoryBean 加载 YAML 文件1.…

缓存和数据库一致性

前言: 项目的难点是如何保证缓存和数据库的一致性。无论我们是先更新数据库,后更新缓存还是先更新数据库,然后删除缓存,在并发场景之下,仍然会存在数据不一致的情况(也存在删除失败的情况,删除…

软件测试|解决Github port 443 : Timed out连接超时的问题

前言 GitHub是全球最大的开源代码托管平台之一,许多开发者和团队使用它来管理和协作开源项目。但在当下,我们在clone或者提交代码时会经常遇到"GitHub Port 443: Timed Out"错误,这意味着我们的电脑无法建立与GitHub服务器的安全连…