《0基础》学习Python——第二十四讲__爬虫/<7>深度爬取
一、深度爬取
深度爬取是指在网络爬虫中,获取网页上的所有链接并递归地访问这些链接,以获取更深层次的页面数据。
通常,一个简单的爬虫只会获取到初始页面上的链接,并不会进一步访问这些链接上的其他页面。而深度爬取则会不断地获取链接,并继续访问这些链接上的页面,直到达到设定的深度限制或者没有更多的链接可供访问为止。这样可以更全面地获取网页上的数据,并且可以发现更多的链接。但是需要注意的是,深度爬取需要谨慎操作,以免对目标网站造成过大的负载。
二、爬取豆瓣电影的电影链接中的数据
比如点开下列页面中的链接得到另一个页面,而另一个页面就有很多新的数据,就可以爬取更多的东西,当然了,点开后的链接也可以下次爬取,只需要对爬到的URL再次进行发送get请求即可。

点开蓝色选中的链接得到关于这个电影的全部信息:

上图中所有的数据都可以爬取,下面我们就演示一下对电影目录一整页的数据进行深度爬取
三、实战爬取整页电影目录的数据
1、获取这一整页电影的所有URL:
经过前面几节课,我们也都学习了怎么样去获取网页信息,因为这些电影都是存放在一个列表里的(在点击网络-元素-在网页中选择一个元素检查的标识,当选中网页中可以看到各个板块的排列位置),或者也可以在‘元素’里看到当前页面电影信息都存放在li标签下,所以可以通过下列图片得到单个电影的URL,下面代码部分就是爬取到了所有电影的URL了:

import requests
from lxml import etree
import fake_useragentif __name__ == '__main__':head={'User-Agent':fake_useragent.UserAgent().random #随机生成一个UA标识}#获取当前页面的URLurl='https://movie.douban.com/top250'#发送get请求response=requests.get(url,headers=head)#返回获取到的页面源码lxml_info=response.text#解析获取到的信息tree=etree.HTML(lxml_info)#利用xpath定位到所有电影存放的标签下film=tree.xpath('//ol[@class="grid_view"]/li')#对获取到的所有li标签进行遍历循环for li in film:#当前位置在li标签,用xpath读取到电影链接,再通过join去除括号film_url="".join(li.xpath('./div/div[2]/div[1]/a/@href'))print(film_url)
2、爬取链接内的页面信息
通过上一步我们已经得到所有电影的URL了,那么下一步则是对这些URL继续进行get请求:
for li in film:#当前位置在li标签,用xpath读取到电影链接,再通过join去除括号film_url="".join(li.xpath('./div/div[2]/div[1]/a/@href'))#对获取到的URL发送get请求res=requests.get(film_url,headers=head)#打印请求到的信息res_t=res.text
获取到电影页面信息后我们继续像上部一样对这段数据进行处理,即以下代码:
res_t=res.text# print(res_t)#解析获取到的信息tree_url=etree.HTML(res_t)#定位到所需要信息的位置,比如我们要爬取他的剧情简介#首先是电影名称fil_name="".join(tree_url.xpath('//body/div[3]/div[1]/h1/span[1]/text()'))#其次是电影的简介内容#因为此处有两种类型的电影简介标签位置span[1]和span[2],所以做一个判断,如果电影1有内容那么打印电影1,反之打印电影2if "".join(tree_url.xpath('//div[@class="related-info"]/div[1]/span[2]/text()')):print(fil_name)print("".join(tree_url.xpath('//div[@class="related-info"]/div[1]/span[2]/text()')).strip())else:film_jianjie = "".join(tree_url.xpath('//div[@class="related-info"]/div[1]/span[1]/text()'))print(fil_name)print(film_jianjie.strip())
注意:此处做了一个判断,因为其中电影的标签存放位置略有不同,即span[1]和span[2]
如下图肖申克的救赎,其简介存放在标签span[2]下,而霸王别姬存放在span[1]下:

霸王别姬如下:

3、完整代码如下:
import requests
from lxml import etree
import fake_useragentif __name__ == '__main__':head={'User-Agent':fake_useragent.UserAgent().random #随机生成一个UA标识}#获取当前页面的URLurl='https://movie.douban.com/top250'#发送get请求response=requests.get(url,headers=head)#返回获取到的页面源码lxml_info=response.text#解析获取到的信息tree=etree.HTML(lxml_info)#利用xpath定位到所有电影存放的标签下film=tree.xpath('//ol[@class="grid_view"]/li')#对获取到的所有li标签进行遍历循环for li in film:#当前位置在li标签,用xpath读取到电影链接,再通过join去除括号film_url="".join(li.xpath('./div/div[2]/div[1]/a/@href'))#对获取到的URL发送get请求res=requests.get(film_url,headers=head)#打印请求到的信息res_t=res.text# print(res_t)#解析获取到的信息tree_url=etree.HTML(res_t)#定位到所需要信息的位置,比如我们要爬取他的剧情简介#首先是电影名称fil_name="".join(tree_url.xpath('//body/div[3]/div[1]/h1/span[1]/text()'))#其次是电影的简介内容#因为此处有两种类型的电影简介标签位置span[1]和span[2],所以做一个判断,如果电影1有内容那么打印电影1,反之打印电影2if "".join(tree_url.xpath('//div[@class="related-info"]/div[1]/span[2]/text()')):print(fil_name)print("".join(tree_url.xpath('//div[@class="related-info"]/div[1]/span[2]/text()')).strip())else:film_jianjie = "".join(tree_url.xpath('//div[@class="related-info"]/div[1]/span[1]/text()'))print(fil_name)print(film_jianjie.strip())
另外可以在后面加一条创建新文件的代码用来存放这些数据,已达到获取信息存放到本地保存的目的。
相关文章:
《0基础》学习Python——第二十四讲__爬虫/<7>深度爬取
一、深度爬取 深度爬取是指在网络爬虫中,获取网页上的所有链接并递归地访问这些链接,以获取更深层次的页面数据。 通常,一个简单的爬虫只会获取到初始页面上的链接,并不会进一步访问这些链接上的其他页面。而深度爬取则会不断地获…...
Python Pygame制作简单五子棋游戏
代码参考自:https://blog.csdn.net/weixin_43918046/article/details/119521845 新增功能:1任意棋盘大小;2.任意棋子连线 # 棋盘大小 [670, 670] # 棋盘行列 15*15 import pygame from pygame.locals import QUIT, KEYDOWN import numpy as…...
JS+H5在线文心AI聊天(第三方接口)
源码在最后面 调用的不是文心官方接口 可以正常聊天 有打字动画 效果图 源代码 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-s…...
kafka源码阅读-ReplicaStateMachine(副本状态机)解析
概述 Kafka源码包含多个模块,每个模块负责不同的功能。以下是一些核心模块及其功能的概述: 服务端源码 :实现Kafka Broker的核心功能,包括日志存储、控制器、协调器、元数据管理及状态机管理、延迟机制、消费者组管理、高并发网络…...
【MetaGPT系列】【MetaGPT完全实践宝典——如何定义单一行为多行为Agent】
目录 前言一、智能体1-1、Agent概述1-2、Agent与ChatGPT的区别 二、多智能体框架MetaGPT2-1、安装&配置2-2、使用已有的Agent(ProductManager)2-3、拥有单一行为的Agent(SimpleCoder)2-3-1、定义写代码行为2-3-2、角色定义2-3…...
Kolla-Ansible的确是不支持CentOS-Stream系列产品了
看着OpenStack最新的 C 版本出来一段时间了,想尝个鲜、用Kolla-Ansible进行容器化部署,结果嘛。。。 根据实验结果,自OpenStack Bobcat版本开始,Kolla-Ansible就适合在CentOS系列产品上部署了,通过对 Bobcat和Caracal…...
IDEA启动C:\Users\badboy\.jdks\corretto-17.0.7\bin\java.exe -Xmx700m报错
这篇文章写的就很详细了(IDEA启动C:\Users\badboy\.jdks\corretto-17.0.7\bin\java.exe -Xmx700m报错_error occurred during initialization of vm failed -CSDN博客)...
ctfshow298-300(java信息泄露,代码审计)
Web298 代码审计 这里看到getVipStatus方法,获得了获取flag的条件就是user等于admin,password等于ctfshow Poc: https://d036a90d-ac1c-4de1-9b0b-86f52d2586b9.challenge.ctf.show/ctfshow/login?usernameadmin&passwordctfshow Web299 打开页面…...
Java 基础 and 进阶面试知识点(超详细)
一个 Java 文件中是否可以存在多个类(修饰类除外)? 一个 Java 文件中是可以存在多个类的,但是一个 Java 文件中只能存在一个 public 所修饰的类,而且这个 Java 文件的文件名还必须和 public 所修饰类的类名保持一致&a…...
【LabVIEW作业篇 - 5】:水仙花数、数组与for循环的连接
文章目录 水仙花数数组与for循环的连接 水仙花数 水仙花数,是指一个3位数,它的每个位上的数字的3次幂之和等于它本身。如371 3^3 7^3 1^3,则371是一个水仙花数。 思路:水仙花数是一个三位数,通过使用for循环…...
Kafka系列之如何提高消费者消费速度
前言 在实际开发过程中,如果使用Kafka处理超大数据量(千万级、亿级)的场景,Kafka消费者的消费速度可能决定系统性能瓶颈。 实现方案 为了提高消费者的消费速度,我们可以采取以下措施: 将主题的分区数量增大,如 20&…...
mac安装Whisper
Whisper 官方git https://github.com/openai/whisper?tabreadme-ov-file 基本上参考官方的安装流程 pip3 install -U openai-whisper pip3 install githttps://github.com/openai/whisper.git pip3 install --upgrade --no-deps --force-reinstall githttps://github.com/…...
Linux:进程概述(什么是进程、进程控制块PCB、并发与并行、进程的状态、进程的相关命令)
进程概述 (1)What(什么是进程) 程序:磁盘上的可执行文件,它占用磁盘、是一个静态概念 进程:程序执行之后的状态,占用CPU和内存,是一个动态概念;每一个进程都有一个对应的进程控制块…...
Unity UGUI 之 坐标转换
本文仅作学习笔记与交流,不作任何商业用途 本文包括但不限于unity官方手册,唐老狮,麦扣教程知识,引用会标记,如有不足还请斧正 本文在发布时间选用unity 2022.3.8稳定版本,请注意分别 前置知识:…...
使用 uPlot 在 Vue 中创建交互式图表
本文由ScriptEcho平台提供技术支持 项目地址:传送门 使用 uPlot 在 Vue 中创建交互式图表 应用场景介绍 uPlot 是一个轻量级、高性能的图表库,适用于创建各种交互式图表。它具有丰富的功能,包括可自定义的轴、网格、刻度和交互性。本篇博…...
SpringBoot 项目配置文件注释乱码的问题解决方案
一、问题描述 在项目的配置文件中,我们写了一些注释,如下所示: 但是再次打开注释会变成乱码,如下所示: 那么如何解决呢? 二、解决方案 1. 点击” File→Setting" 2. 搜索“File Encodings”, 将框…...
TTS如何正确读AI缩写、金额和数字
案例:Tell me whats AI(a i), you need pay $186.30, your card Number is 1 2 3, your work Number is 5 6 7 8...
python基础知识点(蓝桥杯python科目个人复习计划75)
第一题:ip补充 题目描述: 小蓝的ip地址为192.168.*.21,其中*是一个数字,请问这个数字最大可能是多少? import os import sys# 请在此输入您的代码 print("255") 第二题:出现最多的字符 题目描…...
小技巧:如何在已知PDF密码情况下去掉PDF的密码保护
第一步,用Edge打开你的pdf,输入密码进去 第二步,点击打印 第三步,选择导出PDF,选择彩印 第四步,选择导出位置,导出成功后打开发现没有密码限制了!...
Java泛型的介绍和基本使用
什么是泛型 泛型就是将类型参数化,比如定义了一个栈,你必须在定义之前声明这个栈中存放的数据的类型,是int也好是double或者其他的引用数据类型也好,定义好了之后这个栈就无法用来存放其他类型的数据。如果这时候我们想要使用这…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
Element-Plus:popconfirm与tooltip一起使用不生效?
你们好,我是金金金。 场景 我正在使用Element-plus组件库当中的el-popconfirm和el-tooltip,产品要求是两个需要结合一起使用,也就是鼠标悬浮上去有提示文字,并且点击之后需要出现气泡确认框 代码 <el-popconfirm title"是…...
【QT控件】显示类控件
目录 一、Label 二、LCD Number 三、ProgressBar 四、Calendar Widget QT专栏:QT_uyeonashi的博客-CSDN博客 一、Label QLabel 可以用来显示文本和图片. 核心属性如下 代码示例: 显示不同格式的文本 1) 在界面上创建三个 QLabel 尺寸放大一些. objectName 分别…...
