Python 爬虫之简单的爬虫(三)

爬取动态网页(上)


文章目录

  • 爬取动态网页(上)
  • 前言
  • 一、大致内容
  • 二、基本思路
  • 三、代码编写
    • 1.引入库
    • 2.加载网页数据
    • 3.获取指定数据
  • 总结


前言

之前的两篇写的是爬取静态网页的内容,比较简单。接下来呢给大家讲一下如何去爬取动态网页的数据。同样,上两篇用的Python库在这里也是用不了滴。


`

一、大致内容

以此网址为例:豆瓣2022年度电影榜单
通过使用selenium相关技术来爬取相应的片名、人物、产地、评分等信息。

二、基本思路

  • 第一步:打开网页,右键在指定的数据类型上,点击检查
  • 第二步:网页就会弹出一个窗口,并定位到相应的网页代码的位置上。

在这里插入图片描述

  • 第三步:根据数据前面的div、class等标签参数,来进行代码的编写,获取一系列的同类数据。
  • 第四步:对获取的数据进行整理,保存成我们便于查看的格式,比如excel文档。(时间来不及了。。这个会在《爬取动态网页(下)》上写)

三、代码编写

1.引入库

代码如下:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

2.加载网页数据

代码如下:

driver = webdriver.Firefox()driver.get("https://movie.douban.com/annual/2022/?fullscreen=1&source=movie_navigation")time.sleep(5)driver.execute_script('window.scrollTo(0, document.body.scrollHeight);')
  1. driver = webdriver.Firefox(): 这一行创建了一个新的 Firefox WebDriver 实例。WebDriver 是一个接口,允许你通过编程方式控制浏览器的行为。
  2. driver.get(): 这一行使用 WebDriver 让 Firefox 浏览器打开指定的 URL(在这个例子中是豆瓣电影 2022 年度榜单页面)。
  3. time.sleep(): 这一行会让 Python程序暂停执行5秒。这个暂停是为了给网页加载时间,确保所有内容都已完全加载到浏览器中。在实际操作中,可能需要根据网页的实际加载速度来调整这个等待时间。
  4. driver.execute_script(): 这段代码的作用是滚动浏览器窗口到底部。window.scrollTo(x, y) 是一个 JavaScript方法,它接受两个参数:x 表示水平滚动位置,y 表示垂直滚动位置。在这里,0表示保持水平滚动位置不变,document.body.scrollHeight表示将垂直滚动位置设置为文档的总高度,从而实现滚动到底部的效果。

这段代码的主要目的是打开豆瓣电影年度榜单页面,并滚动到页面底部,为了确保所有内容都已经加载完成。


3.获取指定数据

代码如下:

# 获取四大影视类型标题
comment_Titles = driver.find_elements(by=By.CSS_SELECTOR, value='.module-top10-grid-chart-title')
for comment in comment_Titles:print(comment.text)# 获取每个影视类型里的第一名片名
which_mo_list = driver.find_elements(by=By.CSS_SELECTOR, value='.subject-top-title')
for each_mo in which_mo_list:movie_title = each_mo.get_attribute('title')print(movie_title)# 获取每个影视类型里的第一名评分
movies_top_scores_list = driver.find_elements(by=By.CSS_SELECTOR, value='.rating-card-value')
for movie_top_score in movies_top_scores_list:score = movie_top_score.textprint(score)# 获取所有影片的人物信息
persons_list = driver.find_elements(by=By.CSS_SELECTOR, value='.subject-credit')
for person in persons_list:person_title = person.find_elements(by=By.TAG_NAME, value='p')for title in person_title:print(title.text)# 获取影片的产地(每个影视类型里的第一名除外)
addresses_list = driver.find_elements(by=By.CSS_SELECTOR, value='.subjects-rank-credits > div:nth-child(2)')
for addresses in addresses_list:address_text = addresses.textprint(address_text)# 获取影片评分(每个影视类型里的第一名除外)
movies_scores_list = driver.find_elements(by=By.CSS_SELECTOR, value='.subjects-rank-rating')
for movie_score in movies_scores_list:score = movie_score.textprint(score)

乍一看有很多代码。仔细看其实都是一样的格式:先是find它们在哪里,然后把它们保存成一个列表,最后使用for结构遍历打印出来。

以其中一个举例(# 获取四大影视类型标题)解释一下:

  1. comment_Titles = driver.find_elements(by=By.CSS_SELECTOR,value=‘.module-top10-grid-chart-title’): 这一行使用 WebDriver 的find_elements 方法查找页面上所有匹配给定 CSS 选择器的元素。在这个例子中,CSS 选择器是.module-top10-grid-chart-title,它会匹配所有具有module-top10-grid-chart-title 类名的 HTML 元素。find_elements方法会返回一个包含所有匹配元素的列表。
  2. for comment in comment_Titles:: 这一行开始一个 for 循环,遍历 comment_Titles列表中的每个元素。在每次循环中,当前元素会被赋值给变量 comment。
  3. print(comment.text): 这一行在循环内部执行,它使用 text 属性获取当前 comment元素中的文本内容,并将其打印到控制台。text 属性返回元素及其所有子元素的纯文本内容(不包括 HTML 标签)。

总的来说,这两行代码的作用是从页面上找到所有具有 module-top10-grid-chart-title 类名的元素,并打印出它们的文本内容。这些元素是豆瓣电影年度榜单中的四大影视类型的标题。

给大家看一下效果图吧。
在这里插入图片描述


总结

`

到这里已经完成一大半了。剩下的就是对数据的处理,如何让它们看起来比较舒服。由于时间问题,剩下的下回见各位。在这里插入图片描述)

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

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

相关文章

使用Redisson实现高并发场景下的缓存穿透、缓存击穿、缓存雪崩以及缓存数据不一致性的问题

使用Redisson实现高并发场景下的缓存穿透、缓存击穿、缓存雪崩以及缓存数据不一致性的问题 缓存击穿:同一时间进行查询,缓存中没有找到,查询数据库,可以通过设置不同的过期时间解决缓存穿透:同一时间进行查询&#xf…

20V升26V 600mA升压型LED驱动芯片,PWM调光芯片-AH1160

AH1160是一个功能强大的升压型LED驱动芯片,专为需要精确控制LED亮度的PWM调光应用而设计。它可将20V输入电压升压至26V,同时提供稳定的600mA电流输出,适用于各种LED照明设备。 芯片特点: 1. 输入电压范围:AH1160可在…

linux驱动的学习 驱动开发初识

1 设备的概念 在学习驱动和其开发之前,首先要知道所谓驱动,其对象就是设备。 1.1 主设备号&次设备号: 在Linux中,各种设备都以文件的形式存在/dev目录下,称为设备文件。最上层的应用程序可以打开,关…

uniapp获取键盘高度顶起底部输入框

核心代码&#xff1a; uni.onKeyboardHeightChange((res) > {console.log(res.height);//转化为rpxthis.KeyHight res.height;}); 全部代码&#xff1a; <template><view class"pagesone" :class"bg-themeColor.name" style"padding-t…

【Windows系统C盘爆红】之扩展C盘大小详细步骤

扩展C盘大小详细步骤 一、C盘爆红怎么办二、为什么C盘容易爆满三、c盘扩容 建议&#xff1a;文中的两处链接&#xff0c;可以参考进行c盘操作&#xff01; 一、C盘爆红怎么办 我们好多人在使用一段时间电脑后&#xff0c;发现C盘大小会急剧减少&#xff0c;开始小蓝条快占满&…

【Go】基于GoFiber从零开始搭建一个GoWeb后台管理系统(五)角色管理、菜单管理模块

窝来辣&#x1f601; 下面是前几篇的内容&#xff1a; 第一篇&#xff1a;【Go】基于GoFiber从零开始搭建一个GoWeb后台管理系统&#xff08;一&#xff09;搭建项目 第二篇&#xff1a;【Go】基于GoFiber从零开始搭建一个GoWeb后台管理系统&#xff08;二&#xff09;日志…

挑战52天学小猪佩奇笔记--day26

52天学完小猪佩奇--day26 ​【本文说明】 本文内容来源于对B站UP 脑洞部长 的系列视频 挑战52天背完小猪佩奇----day26 的视频内容总结&#xff0c;方便复习。强烈建议大家去关注一波UP&#xff0c;配合UP视频学习。 day26的主题&#xff1a;堆雪人 猜台词&#xff1a; 旁白&am…

卷积神经网络的学习与实现

基于matlab的卷积神经网络(CNN)讲解及代码_matlab中如何查看cnn损失函数-CSDN博客 可以看到与BP神经网络相比&#xff0c;卷积神经网络更加的复杂&#xff0c;这里将会以cnn作为学习案例。 1.经典反向传播算法公式详细推导 这里引用经典反向传播算法公式详细推导_反向目标公…

docker jar包打成镜像并推送到仓库

shell脚本 #!/bin/bash image_name$1 version$2 echo ${version}echo build...... docker build -t ${image_name}:${version} . echo build doing..... sleep 10 image_idsudo docker images | grep ${image_name} | awk -F" " {print $3} | head -n 1 echo ${imag…

敏捷开发项目管理流程及scrum工具

项目启动&#xff1a; 团队明确项目愿景、目标和范围&#xff0c;确定项目范围和优先级&#xff0c;并建立团队以及开展初步计划。 制定产品待办事项清单&#xff08;Product Backlog&#xff09;&#xff1a; 定义项目所需功能、任务和需求列表&#xff0c;并按优先级排序。 …

使用libaom处理av1编码教程

使用libaom处理av1编码教程 文章目录 使用libaom处理av1编码教程一. av1 是什么二. av1 用处三. libaom 是什么四. libaom 安装五. libaom 安装完成六. 解码av1 一. av1 是什么 AV1&#xff08;AOMedia Video 1&#xff09;是一种 开源视频编码格式 。它由开放媒体联盟 (AOM) …

N6705B 直流电源分析仪,模块化,600 W,4 个插槽,是德科技 低功耗测试专家

N6705B 直流电源分析仪 简述&#xff1a; N6705B 直流电源分析仪将多达 4 个先进电源与数字万用表、示波器、任意波形发生器和 Data logger 特性融为一体&#xff0c;可以显著提高向被测件提供直流电压和电流以及进行测量的效率。N6705B 可独立测量被测件的电流&#xff0c;无…

【重点】【前缀树|字典树】208.实现Trie(前缀树)

题目 前缀树介绍&#xff1a;https://blog.csdn.net/DeveloperFire/article/details/128861092 什么是前缀树 在计算机科学中&#xff0c;trie&#xff0c;又称前缀树或字典树&#xff0c;是一种有序树&#xff0c;用于保存关联数组&#xff0c;其中的键通常是字符串。与二叉查…

手写RTOS准备

1. 确定RTOS基本功能 首先&#xff0c;你需要定义你的RTOS应该具备的基本功能。对于一个简单的RTOS&#xff0c;你可能需要包括以下功能&#xff1a; 任务调度&#xff1a;&#xff08;Task Scheduling&#xff09;&#xff1a;这是RTOS最核心的功能之一。它允许系统支持多个任…

【Apache-StreamPark】Flink 开发利器 StreamPark 的介绍、安装、使用

【Apache-StreamPark】Flink 开发利器 StreamPark 的介绍、安装、使用 1&#xff09;框架介绍与引入1.1.&#x1f680; 什么是 StreamPark1.2.&#x1f389; Features1.3.&#x1f3f3;‍&#x1f308; 组成部分1.4.引入 StreamPark 2&#xff09;安装部署2.1.环境要求2.2.Hado…

【缓存】一、Redis的基本使用与Redisson分布式锁

缓存 缓存技术是一种可以大幅度提高系统性能的技术&#xff0c;我们可以在某些适用的场景下使用缓存来大幅度的提高系统性能 读缓存的基本流程&#xff1a; 请求向缓存中查数据 if (命中) {返回缓存中的数据 } else {从数据库中取出数据将该数据在缓存中再存储一份返回缓存中…

重温经典struts1之八种页面跳转或请求转发的方式

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 前言 今天来学习下&#xff0c;struts1框架中实现页面跳转或请求转发的八种方式。 页面跳转方式 request的Dispatcher方法 这种方式在学习servlet编程中&#xff0c;我们学…

ACM32如何保护算法、协议不被破解或者修改

ACM32具有以下几种功能&#xff0c;可以保护算法、协议不被破解或者修改。 1.存储保护  RDP读保护  WRP写保护  PCROP 专有代码读保护  MPU存储区域权限控制  Secure User Memory存储区域加密 2.密码学算法引擎  AES  HASH  随机数生成  …

Electron中Tray的setContextMenu导致窗口无法聚焦

在使用 Electron 开发应用时&#xff0c;经常会遇到使用 Tray&#xff08;托盘&#xff09;和设置上下文菜单&#xff08;ContextMenu&#xff09;导致窗口无法正常聚焦的问题。这会导致用户无法在带有输入框的窗口中进行输入&#xff0c;影响应用的用户体验。 tray.setContex…

Vue3-22-组件-插槽的使用详解

插槽是干啥的 插槽 就是 组件中的一个 占位符&#xff0c; 这个占位符 可以接收 父组件 传递过来的 html 的模板值&#xff0c;然后进行填充渲染。 就这么简单&#xff0c;插槽就是干这个的。要说它的优点吧&#xff0c;基本上就是可以使子组件的内容可以被父组件控制&#xf…