《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())

        另外可以在后面加一条创建新文件的代码用来存放这些数据,已达到获取信息存放到本地保存的目的。

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

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

相关文章

python os库使用教程

os库使用教程 1.创建文件夹os.path.exists()检查文件是否存在os.listdir查看文件夹下的所有文件filename.endswith()查看文件列表的png或者txt结尾的所有文件shutil.move移动目标到文件夹 1.创建文件夹 先在盘符里创建一个文件用来演示,我这里…

前端JS特效第48集:terseBanner焦点图轮播插件

terseBanner焦点图轮播插件&#xff0c;先来看看效果&#xff1a; 部分核心的代码如下(全部代码在文章末尾)&#xff1a; <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatibl…

HTTPServer改进思路1

Nginx源码思考项目改进 架构模式 事件驱动架构(EDA&#xff09;用于处理大量并发连接和IO操作 优点&#xff1a;高效处理大量并发请求&#xff0c;减少线程切换和阻塞调用技术实现&#xff1a;直接使用EPOLL&#xff0c;参考Node.js的http服务器 网络通信 协议&#xff1a;HTT…

【LeetCode】对称二叉树

目录 一、题目二、解法完整代码 一、题目 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true 示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&#…

友力科技数据中心搬迁方案

将当前运行机房中的所有设备、应用系统安全搬迁至新数据中心机房&#xff0c;实现平滑切换、平稳过渡&#xff0c;最大限度地降低搬迁工作对业务的影响。 为了确保企事业单位能够顺利完成数据中心机房搬迁工作&#xff0c;我们根据实际经验提供了4个基本原则&#xff0c;希望能…

异步电机矢量控制matlab simulink

1、内容简介 略 86-可以交流、咨询、答疑 异步电机、矢量控制 2、内容说明 略 3、仿真分析 略 4、参考论文 略

YOLOv2小白精讲

YOLOv2是一个集成了分类和检测任务的神经网络&#xff0c;它将目标检测和分类任务统一在一个单一的网络中进行处理。 本文在yolov1的基础上&#xff0c;对yolov2的网络结构和改进部分进行讲解。yolov1的知识点可以看我另外一篇博客&#xff08;yolov1基础精讲-CSDN博客&#xf…

设计模式-抽象工厂

抽象工厂属于创建型模式。 抽象工厂和工厂设计模式的区别&#xff1a; 工厂模式的是设计模式中最简单的一种设计模式&#xff0c;主要设计思想是&#xff0c;分离对象的创建和使用&#xff0c;在Java中&#xff0c;如果需要使用一个对象时&#xff0c;需要new Class()&#xff…

RAG-LLM Survey

大模型虽然厉害&#xff0c;但是存在着幻觉、知识陈旧等问题。检索增强生成&#xff08;Retrieval-Augmented Generation, RAG&#xff09;可以通过挂载外部知识库&#xff0c;来提升生成内容的准确性和可信度。了解一个研究方向的最快的方法&#xff0c;就是阅读相关的综述。今…

Python数据可视化------动态柱状图

一、基础柱状图 # 基础柱状图 # 导包 from pyecharts.charts import Bar from pyecharts.options import *# 构建柱状图 bar Bar() # 添加数据&#xff08;列表&#xff09; x_list ["张三", "李四", "王五", "赵六"] y_list [50,…

你的生产车间有个好“布局”吗?

对于生产车间而言&#xff0c;科学合理的布局设计便是这“成功的一半”。在现代制造环境中&#xff0c;高效的物流动线、合理的设备配置、以及人性化的工作环境&#xff0c;是提升生产效率、保障产品质量的关键。 一个好布局的生产车间需具备以下几个关键特征&#xff0c;以确保…

【ADRC笔记】LESO-Wb

公式推导(bilibili) 一阶ESO 二阶ESO 二阶自抗扰控制器基本原理 选取状态变量 观测器收敛性推导 wo 观测器带宽

数据结构(下)复习

一丶数据结构概述 1.数据结构是一门研究非数值计算的程序设计问题中计算机的数据元素以及它们之间的关系和运算等的学科。 2.基本数据结构&#xff0c;从逻辑上可分为线性结构和非线性结构&#xff0c;大体上可分成表结构、树结构、图结构 和散结构4大类 表结构用于表示结点的…

科普文:百度交易中台之订单系统架构浅析

百度交易中台作为集团移动生态战略的基础设施&#xff0c;面向收银交易与清分结算场景&#xff0c;为赋能业务提供高效交易生态搭建。目前支持百度体系内多个产品线&#xff0c;主要包含&#xff1a;小程序&#xff0c;地图打车&#xff0c;百家号&#xff0c;招财猫&#xff0…

算法题目整合

文章目录 121. 小红的区间翻转142. 两个字符串的最小 ASCII 删除总和143. 最长同值路径139.完美数140. 可爱串141. 好二叉树 121. 小红的区间翻转 小红拿到了两个长度为 n 的数组 a 和 b&#xff0c;她仅可以执行一次以下翻转操作&#xff1a;选择a数组中的一个区间[i, j]&…

企业微信PC版应用跳转到默认浏览器,避坑指南,欢迎补充(Vue项目版)。。。

引子 关于企业微信PC版应用跳转到默认浏览器&#xff0c;我之前写过一篇文章&#xff1a;企业微信PC版应用跳转到默认浏览器&#xff0c;避坑指南&#xff0c;欢迎补充。。。 以前的文章里用的前后端一体的Jsp项目&#xff0c;这次我使用的是前后端分离的Vue项目&#xff0c;…

C语言 通讯录管理 完整代码

这份代码&#xff0c;是我从网上找的。目前是能运行。我正在读。有些不懂的地方&#xff0c;等下再记录下来。 有些地方的命名&#xff0c;还需要重新写一下。 比如: PersonInfo* info &address_book->all_address[address_book->size]; 应该改为&#xff1a; Perso…

使用SpringCloud搭建分布式配置中心

在现代的分布式系统中&#xff0c;配置管理是一个非常重要的组成部分。传统的做法是将配置文件放在每个服务的本地进行配置&#xff0c;这样的做法在规模较小的系统中还能够接受&#xff0c;但是当系统规模逐渐扩大时&#xff0c;配置管理将变得非常困难&#xff0c;容易出错。…

QT--文件操作和文件读写

文件操作和文件读写 QFile 类用于对文件进行操作&#xff0c;它继承自 QIODevice&#xff0c;可以进行读写操作。主要用于打开、关闭、读取、写入和管理文件。 1. 首先要指定文件路径 QFile fn(“文件路径”);也可以通过文件对话框来选择文件getOpenFileName 函数原型 QStr…

【大数据面试题】37 Doris 是怎么保证性能的?

一步一个脚印&#xff0c;一天一道大数据面试题 博主希望能够得到大家的点赞收藏支持&#xff01;非常感谢 点赞&#xff0c;收藏是情分&#xff0c;不点是本分。祝你身体健康&#xff0c;事事顺心&#xff01; Doris 是当下大热的 MPP 数据库&#xff0c;下面来聊聊它如何保证…