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

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.lryc.cn/news/263155.html

相关文章:

  • 为突发事件提供高现势性数据支撑!大势智慧助力中山市2023应急测绘保障演练举行
  • 图片速览 OOD用于零样本 OOD 检测的 CLIPN:教 CLIP 说不
  • a16z:加密行业2024趋势“无缝用户体验”
  • C# WPF上位机开发(属性页面的设计)
  • macOS 安装 oh-my-zsh 后 node 报错 command not found : node
  • AI 绘画 | Stable Diffusion 视频数字人
  • 《代码随想录》--二叉树(一)
  • shell编程-数组与运算符详解(超详细)
  • Vim入门
  • 动态加载库
  • React中渲染html结构---dangerouslySetInnerHTML
  • 计网02-计算机网络参考模型
  • 模块测试:确保软件质量的关键步骤
  • Postman接口测试之Postman常用的快捷键
  • keil自动分配SDRAM空间设置使用
  • TikTok获客怎么做?可以定制一个获客工具!
  • 数据结构(Chapter Two -02)—顺序表基本操作实现
  • SQL语句整理二--Mysql
  • oracle与gbase8s迁移数据类型对照
  • Flink系列之:集合操作
  • STL:string的常见用法
  • GBASE南大通用 ADO.NET 中的事务
  • App(Android)ICP备案号查询——————高仿微信
  • 修改npm源码解决服务端渲染环境中localstorage报错read properties of undefined (reading getItem)
  • Educational Codeforces Round 160 (Div. 2) A~C(D,E更新中...)
  • 【Maven-Helper】利用 Maven-Helper 解决依赖冲突问题
  • C# WPF上位机开发(知识产权ip保护)
  • 【Jenkins】Pipeline 语法解析(声明式Pipeline)
  • 二叉树的最大深度(LeetCode 104)
  • 03-数据结构-栈与队列