Python爬虫(6) --深层爬取

深层爬取

在前面几篇的内容中,我们都是爬取网页表面的信息,这次我们通过表层内容,深度爬取内部数据。

接着按照之前的步骤,我们先访问表层页面:

  1. 指定url
  2. 发送请求
  3. 获取你想要的数据
  4. 数据解析

我们试着将以下豆瓣读书页面的书籍进一步爬取:

https://book.douban.com/tag/%E4%BA%92%E8%81%94%E7%BD%91

在这里插入图片描述

在浏览器点击这本书,我们要通过这个页面进去这本书的详细页面爬取它的详细信息,它的详细页面链接在href标签中。

爬取

指定url

url = "https://book.douban.com/tag/%E4%BA%92%E8%81%94%E7%BD%91"

发送请求

import fake_useragent
import requests
head = {"User-Agent": fake_useragent.UserAgent().random
}
resp = requests.get(url, headers=head)

获取想要的数据

from lxml import etree
res_text = resp.text

数据解析

tree = etree.HTML(res_text)
a_list = tree.xpath("//ul[@class='subject-list']/li/div[2]/h2/a")

定位到位置之后,我们要取到具体的href标签中的链接,再次进行访问请求:

在这里插入图片描述

进入深层

爬取这个详细页面的内容:

for a in a_list:# 1、urlbook_url = "".join(a.xpath("./@href"))# 2、发送请求book_res = requests.get(book_url, headers=head)# 3、获取想要的信息book_text = book_res.text# 4、数据解析book_tree = etree.HTML(book_text)book_name = "".join(book_tree.xpath("//span[@property='v:itemreviewed']/text()"))author = "".join(book_tree.xpath("//div[@class='subject clearfix']/div[2]/span[1]/a/text()"))publish = "".join(book_tree.xpath("//div[@class='subject clearfix']/div[2]/a[1]/text()"))y = "".join(book_tree.xpath("//span[@class='pl' and text()='出版年:']/following-sibling::text()[1]"))page = "".join(book_tree.xpath("//span[@class='pl' and text()='页数:']/following-sibling::text()[1]"))price = "".join(book_tree.xpath("//span[@class='pl' and text()='定价:']/following-sibling::text()[1]"))bind = "".join(book_tree.xpath("//span[@class='pl' and text()='装帧:']/following-sibling::text()[1]"))isbn = "".join(book_tree.xpath("//span[@class='pl' and text()='ISBN:']/following-sibling::text()[1]"))

完整代码显示

# 通过表层内容 深度爬取内部数据
import time
import fake_useragent
import requests
from lxml import etreehead = {"User-Agent": fake_useragent.UserAgent().random
}if __name__ == '__main__':# 1、urlurl = "https://book.douban.com/tag/%E4%BA%92%E8%81%94%E7%BD%91"# 2、发送请求resp = requests.get(url, headers=head)time.sleep(5)  #请求时停留5秒,不然请求太快可能会被网页拒绝# 3、获取想要的数据res_text = resp.text# print(res_text)# 4、数据解析tree = etree.HTML(res_text)a_list = tree.xpath("//ul[@class='subject-list']/li/div[2]/h2/a")for a in a_list:time.sleep(3)# 1、urlbook_url = "".join(a.xpath("./@href"))# 2、发送请求book_res = requests.get(book_url, headers=head)# 3、获取想要的信息book_text = book_res.text# 4、数据解析book_tree = etree.HTML(book_text)book_name = "".join(book_tree.xpath("//span[@property='v:itemreviewed']/text()"))author = "".join(book_tree.xpath("//div[@class='subject clearfix']/div[2]/span[1]/a/text()"))publish = "".join(book_tree.xpath("//div[@class='subject clearfix']/div[2]/a[1]/text()"))y = "".join(book_tree.xpath("//span[@class='pl' and text()='出版年:']/following-sibling::text()[1]"))page = "".join(book_tree.xpath("//span[@class='pl' and text()='页数:']/following-sibling::text()[1]"))price = "".join(book_tree.xpath("//span[@class='pl' and text()='定价:']/following-sibling::text()[1]"))bind = "".join(book_tree.xpath("//span[@class='pl' and text()='装帧:']/following-sibling::text()[1]"))isbn = "".join(book_tree.xpath("//span[@class='pl' and text()='ISBN:']/following-sibling::text()[1]"))print(book_name, author, publish, y, page, price, bind, isbn)# print(a_list)pass

总结

其实与爬取视频的操作相差不大,先定位页面位置,再找到深层页面的链接,获取想要的信息。

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

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

相关文章

Mysql (五)

create table info ( id int primary key, name varchar(10), score decimal(5,2), address varchar(20), hobbid int(5)); SELECT * FROM info; 排序语法:关键字排序 升序ASC 降序DESC 默认排序方式 升序 配合order by语法使用 SELECT * FROM info ORDER BY…

河南萌新联赛2024第(二)场:南阳理工学院

A 国际旅行Ⅰ D A*BBBB F 水灵灵的小学弟 H 狼狼的备忘录 I 重生之zbk要拿回属于他的一切 J 这是签到 ##A 国际旅行Ⅰ 链接:https://ac.nowcoder.com/acm/contest/87255/A 来源:牛客网 题目描述 很久很久以前,有 n n n 个国家,第…

【ffmpeg命令入门】一篇学会ffmpeg音频选项

文章目录 前言设置音频帧使用方法基本用法 示例示例1:提取前200帧音频示例2:结合其他选项使用 注意事项 设置音频采样率基本用法 示例示例1:调整采样率为48000 Hz示例2:降低采样率为22050 Hz示例3:转换视频文件中的音频…

首发!中科融合3D相机点云转halcon点云 C++代码

中科融合是国内第一家专注于“AI+3D”芯片技术的科技创新型企业。‌拥有完全自主研发的MEMS感知芯片和新一代低功耗AI芯片,‌致力于在5G时代推动具有边缘智能的3D感知设备的发展,‌从而促进智能3D产业链的爆发。‌中科融合的MEMS激光投射模组具有较大的视野和景深,‌以及较强…

字符的统计——423、657、551、696、467、535

423. 从英文中重建数字 最初思路 首先要有一个指针,对于3/4/5为一组地跳跃。起初想的是后瞻性,如果符合0-9任意,则更换index、跳跃。此时写了一个函数,用来判断s的截取段和0-9中有无符合。这个思路并没有进行下去,虽然…

昇思25天学习打卡营第九天|本地安装mindspore之一|Linux的系统在vmware上的安装以及mindspore的安装

课程已经学完了,打算再深入一些。初步的想法是,在本地安装,本地执行。 根据老师的指引,MindSpore官网,“https ://www.mindspore.cn/install/”,注意,因为csdn博客编辑器的原因,当我…

软考:软件设计师 — 6.信息安全

六. 信息安全 1. 加密技术与认证技术 (1)对称与非对称加密 关于对称与非对称加密算法的详细内容,可以参考文章:信息安全基础技术与原理 对称加密 对称加密也称为共享密钥加密。 对称加密中,加密和解密的密钥是同一…

【保姆级教程】跑通YOLOv8-multi-task多任务模型

一、YOLOV8多任务环境准备 1.1 下载安装最新的YOLOv8-multi-task代码 仓库地址: https://github.com/JiayuanWang-JW/YOLOv8-multi-task克隆指令:git clone https://githubfast.com/JiayuanWang-JW/YOLOv8-multi-task.git1.2 配置环境 pip install -r requirements.txt -i h…

IPython的捕获魔术:%%capture命令全攻略

IPython的捕获魔术:%%capture命令全攻略 在IPython和Jupyter Notebook中,%%capture是一个强大的魔术命令,它允许用户捕获并保存单元格的输出,包括stdout(标准输出)和stderr(标准错误&#xff0…

laravel 8 、thinkphp数据库锁机制

lockForUpdate() 在使用时,如果只需要阻止另外程序对其进行修改,可以只使用 1 个lockForUpdate(); 当某个程序需要对其进行修改时,可以使用 lockForUpdate(),避免并发进行修改, 当其他程序也会需要对相同…

vivado IODELAY_GROUP

IODELAY_GROUP将IDELAYCTRL单元格及其关联的IDELAY和 ODELAY细胞允许正确放置和复制。 如果使用IODELAY_GROUP为IDELAYCTRL分配组名,还需要 使用相同的IODELAY_group属性将IDELAY或ODELAY单元格与组相关联。 重要提示:虽然IODELAY_GROUP可以包含多个单元…

【豆包Marscode体验官】揭秘MarsCode AI编辑助手:高效智能编辑新纪元之入门指导与最佳实践

文章目录 1. 概述2. 工具使用过程2.1 MarsCode插件简介2.2 安装和配置2.2.1 安装MarsCode插件2.2.2 配置MarsCode插件 2.3 各个功能的使用2.3.1 代码补全2.3.2 代码补全 Pro【操作提示,No suggestion from Model,不知道是不是版本的问题】2.3.3 代码生成…

sqlalchemy定期保持mysql连接活跃

sqlalchemy定期保持mysql连接活跃 在使用SQLAlchemy连接MySQL数据库时,确保保持活跃连接是很重要的,特别是在长时间不使用数据库连接时。以下是一些建议来定期保持活跃连接: 1、连接池设置: SQLAlchemy使用连接池管理数据库连接。通过配置合适的连接池参数可以有效地保持…

从零开始构建你的第一个Python Web应用

在本文中,我们将带领你从零开始构建一个简单的Python Web应用。不需要任何先验知识,我们会一步步地指导你完成设置、框架选择、代码编写到部署的整个过程。无论你是Web开发新手还是希望扩展技能的老手,这篇文章都将为你提供一个实践操作的起点…

C语言 | Leetcode C语言题解之第278题第一个错误的版本

题目&#xff1a; 题解&#xff1a; int firstBadVersion(int n) {int left 1, right n;while (left < right) { // 循环直至区间左右端点相同int mid left (right - left) / 2; // 防止计算时溢出if (isBadVersion(mid)) {right mid; // 答案在区间 [left, mid] 中…

abc363+cf960div.2+牛客周赛49轮

C - Avoid K Palindrome 2 (atcoder.jp) 思路&#xff1a; 罗列出排列的每一种情况&#xff0c;再根据题目要求进行判断 代码&#xff1a; void solve() {ll n, k;cin >> n >> k;string s;vector<char>a;cin >> s;for (int i 0; i < n; i)a.pus…

C++与lua联合编程

C与lua联合编程 一、环境配置二、lua基本语法1.第一个lua和C程序2.基本数据类型和变量2.1 Nil2.2 Booleans2.3 Numbers2.4 String(最常用) 3. 字符串处理3.1 错误处理3.2 字符串长度:string.len3.3 字符串子串 :string.sub3.4 字符串查找: string.find3.5字符串替换: string.gs…

sortablejs使用filter属性后,元素的默认事件失效了

在使用vue-draggable-plus或者sortablejs时。为了防止某个元素可以拖拽&#xff0c;一般会加上filter属性 但是加上后&#xff0c;会发现这个元素不能点击了&#xff0c;像我这里的滑块也不能滑动了。 查了很久才发现&#xff0c;还有一个属性是 preventOnFilter: true, // 在触…

安宝特方案|解放双手,解决死角,AR带来质量监督新体验

AR质量监督 解放双手&#xff0c;解决死角 在当今制造业快速发展的背景下&#xff0c;质量监督成为确保产品高质量和完善的管理制度的关键环节。然而&#xff0c;传统的质量监督方式存在诸多挑战&#xff0c;如人工操作带来的效率低下、查岗不及时、摄像头死角等问题。 为了解…

浅谈C语言整型类数据在内存中的存储

1、整型类数据 C语言中的整型类数据都归类在整型家族中&#xff0c;其中包括&#xff1a;char、short、int、long、long long这5个大类&#xff0c;而每个大类中又分为两类signed和unsigned,这些都是C语言中的内置类型。以下重点基于char和int这两种类型的数据进行阐述&#x…