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

news/2024/7/19 10:01:16 标签: python, 爬虫, 开发语言

爬取动态网页(上)


文章目录

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


前言

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


`

一、大致内容

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

二、基本思路

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

在这里插入图片描述

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

三、代码编写

1.引入库

代码如下:

python">from selenium import webdriver
from selenium.webdriver.common.by import By
import time

2.加载网页数据

代码如下:

python">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.获取指定数据

代码如下:

python"># 获取四大影视类型标题
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.text
    print(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.text
    print(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.text
    print(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.niftyadmin.cn/n/5273779.html

相关文章

【小技巧】下载网站上的整个文件夹 | HTTrack | wget

有时候需要把某个网站上的整个文件夹下载下来 例如:https://medusa.code-analysis.org/Analysis%20Tools/ 里面嵌套着很多层文件夹,不方便逐个下载 提供几种解决方案 (1) HTTrack(适用于多平台) 下载并安装HTTrack https://www…

vscode dart语言出现蓝色波浪线

pubspec.yaml 注释掉:flutter_lints: ^2.0.0 analysis_options.yaml 注释掉:include: package:flutter_lints/flutter.yaml

STM32_窗口看门狗

什么是窗口看门狗? 窗口看门狗用于监测单片机程序运行时效是否精准,主要检测软件异常,一般用于需要精准检测 程序运行时间的场合。 窗口看门狗的本质是一个能产生 系统复位信号 和 提前唤醒中断 的 6 位计数器 产生复位条件: 当…

12V升18V4A同步升压恒压WT3210

12V升18V4A同步升压恒压WT3210 WT3210 是一款高功率密度的全集成同步升压转换器,内部集成的功率MOSFET管导通电阻为上管8mΩ和下管15mΩ。可为便携式系统提供空间小尺寸 解决方案。WT3210具有 2.7V 至 20V 的宽输入电压范围,应用在单节或两节锂电池的便携…

如何安装运行Wagtail并结合cpolar内网穿透实现公网访问网站界面

文章目录 前言1. 安装并运行Wagtail1.1 创建并激活虚拟环境 2. 安装cpolar内网穿透工具3. 实现Wagtail公网访问4. 固定的Wagtail公网地址 前言 Wagtail是一个用Python编写的开源CMS,建立在Django Web框架上。Wagtail 是一个基于 Django 的开源内容管理系统&#xf…

VMware网络设置+Linux网卡设置+主机与虚拟机相互Ping通

目录 1. Linux网卡设置 1.1 ifcfg-ens33 1.2 修改配置信息 1.3 添加IP信息 1.4 重启网卡、关闭防火墙 2. VMware网络设置 3. 设置主机网络 4. 测试主机与虚拟机网络是否连通 4.1 主机ping虚拟机的Linux 4.2 虚拟机Linux来ping主机 1. Linux网卡设置 刚开始安装的Lin…

鸿蒙开发 - Number和number、String和string等的区别

我们知道鸿蒙开发使用的语言时ArkTS,而ArkTS是TypeScript的超集,TypeScript又是JavaScript的超集,所以对于基本数据类型使用的是TypeScript语法。 在TypeScript中,Number和number是两个不同的类型,Number是JavaScript中…

js多图合成一张图

具体思路 先设置画布的宽高,再将每个图片整理成一个对象的数组通过某个方法传出合成后的base64 (1)、创建一个画布的类,他的属性是canvas虚拟dom和ctx (2)、构造器初始化convas对象、ctx、convas的宽高 …