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

《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源码包含多个模块&#xff0c;每个模块负责不同的功能。以下是一些核心模块及其功能的概述&#xff1a; 服务端源码 &#xff1a;实现Kafka Broker的核心功能&#xff0c;包括日志存储、控制器、协调器、元数据管理及状态机管理、延迟机制、消费者组管理、高并发网络…...

【MetaGPT系列】【MetaGPT完全实践宝典——如何定义单一行为多行为Agent】

目录 前言一、智能体1-1、Agent概述1-2、Agent与ChatGPT的区别 二、多智能体框架MetaGPT2-1、安装&配置2-2、使用已有的Agent&#xff08;ProductManager&#xff09;2-3、拥有单一行为的Agent&#xff08;SimpleCoder&#xff09;2-3-1、定义写代码行为2-3-2、角色定义2-3…...

Kolla-Ansible的确是不支持CentOS-Stream系列产品了

看着OpenStack最新的 C 版本出来一段时间了&#xff0c;想尝个鲜、用Kolla-Ansible进行容器化部署&#xff0c;结果嘛。。。 根据实验结果&#xff0c;自OpenStack Bobcat版本开始&#xff0c;Kolla-Ansible就适合在CentOS系列产品上部署了&#xff0c;通过对 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方法&#xff0c;获得了获取flag的条件就是user等于admin&#xff0c;password等于ctfshow Poc: https://d036a90d-ac1c-4de1-9b0b-86f52d2586b9.challenge.ctf.show/ctfshow/login?usernameadmin&passwordctfshow Web299 打开页面…...

Java 基础 and 进阶面试知识点(超详细)

一个 Java 文件中是否可以存在多个类&#xff08;修饰类除外&#xff09;&#xff1f; 一个 Java 文件中是可以存在多个类的&#xff0c;但是一个 Java 文件中只能存在一个 public 所修饰的类&#xff0c;而且这个 Java 文件的文件名还必须和 public 所修饰类的类名保持一致&a…...

【LabVIEW作业篇 - 5】:水仙花数、数组与for循环的连接

文章目录 水仙花数数组与for循环的连接 水仙花数 水仙花数&#xff0c;是指一个3位数&#xff0c;它的每个位上的数字的3次幂之和等于它本身。如371 3^3 7^3 1^3&#xff0c;则371是一个水仙花数。 思路&#xff1a;水仙花数是一个三位数&#xff0c;通过使用for循环&#xf…...

Kafka系列之如何提高消费者消费速度

前言 在实际开发过程中&#xff0c;如果使用Kafka处理超大数据量(千万级、亿级)的场景&#xff0c;Kafka消费者的消费速度可能决定系统性能瓶颈。 实现方案 为了提高消费者的消费速度&#xff0c;我们可以采取以下措施&#xff1a; 将主题的分区数量增大&#xff0c;如 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&#xff08;什么是进程&#xff09; 程序&#xff1a;磁盘上的可执行文件&#xff0c;它占用磁盘、是一个静态概念 进程&#xff1a;程序执行之后的状态&#xff0c;占用CPU和内存&#xff0c;是一个动态概念&#xff1b;每一个进程都有一个对应的进程控制块…...

Unity UGUI 之 坐标转换

本文仅作学习笔记与交流&#xff0c;不作任何商业用途 本文包括但不限于unity官方手册&#xff0c;唐老狮&#xff0c;麦扣教程知识&#xff0c;引用会标记&#xff0c;如有不足还请斧正 本文在发布时间选用unity 2022.3.8稳定版本&#xff0c;请注意分别 前置知识&#xff1a;…...

使用 uPlot 在 Vue 中创建交互式图表

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 使用 uPlot 在 Vue 中创建交互式图表 应用场景介绍 uPlot 是一个轻量级、高性能的图表库&#xff0c;适用于创建各种交互式图表。它具有丰富的功能&#xff0c;包括可自定义的轴、网格、刻度和交互性。本篇博…...

SpringBoot 项目配置文件注释乱码的问题解决方案

一、问题描述 在项目的配置文件中&#xff0c;我们写了一些注释&#xff0c;如下所示&#xff1a; 但是再次打开注释会变成乱码&#xff0c;如下所示&#xff1a; 那么如何解决呢&#xff1f; 二、解决方案 1. 点击” File→Setting" 2. 搜索“File Encodings”, 将框…...

TTS如何正确读AI缩写、金额和数字

案例&#xff1a;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)

第一题&#xff1a;ip补充 题目描述&#xff1a; 小蓝的ip地址为192.168.*.21&#xff0c;其中*是一个数字&#xff0c;请问这个数字最大可能是多少&#xff1f; import os import sys# 请在此输入您的代码 print("255") 第二题&#xff1a;出现最多的字符 题目描…...

小技巧:如何在已知PDF密码情况下去掉PDF的密码保护

第一步&#xff0c;用Edge打开你的pdf&#xff0c;输入密码进去 第二步&#xff0c;点击打印 第三步&#xff0c;选择导出PDF&#xff0c;选择彩印 第四步&#xff0c;选择导出位置&#xff0c;导出成功后打开发现没有密码限制了&#xff01;...

Java泛型的介绍和基本使用

什么是泛型 ​ 泛型就是将类型参数化&#xff0c;比如定义了一个栈&#xff0c;你必须在定义之前声明这个栈中存放的数据的类型&#xff0c;是int也好是double或者其他的引用数据类型也好&#xff0c;定义好了之后这个栈就无法用来存放其他类型的数据。如果这时候我们想要使用这…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

C++ 设计模式 《小明的奶茶加料风波》

&#x1f468;‍&#x1f393; 模式名称&#xff1a;装饰器模式&#xff08;Decorator Pattern&#xff09; &#x1f466; 小明最近上线了校园奶茶配送功能&#xff0c;业务火爆&#xff0c;大家都在加料&#xff1a; 有的同学要加波霸 &#x1f7e4;&#xff0c;有的要加椰果…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...

AI语音助手的Python实现

引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...