Python解析网页-requests_html

目录

1、什么是requests_html

2、安装与配置

3、快速入门

4、图片下载



1.什么是requests_html

   requests_html是一个Python库,用于从Web页面中提取数据。

          它提供了对HTML内容的解析和处理功能,使您可以轻松地从网页中提取文本、链接、图像和其他元素。

   requests_html库建立在另一个流行的Python库requests之上,并使用了lxml来解析HTML

          它提供了一种简单而灵活的方法来发送HTTP请求并解析响应中的HTML内容。

使用requests_html可以发送GET或POST请求,从HTML响应中提取元素,执行JavaScript渲染,处理表单提交,模拟用户与网页的交互等等。它还支持基于CSS选择器和XPath表达式的元素选择,方便地定位和提取特定的网页元素。

2.安装与配置

pip install requests-html

3.快速入门

使用requests_html模块获取页面中的所有绝对链接的示例代码:

# 创建一个会话
session = requests_html.HTMLSession()
# 起送GET请求并获取页面内容
resp = session.get("https://www.igdcc.com/shouji/katong/") # type: requests_html.HTMLResponse
# 渲染JavaScript
resp.html.render()
​
# 获取页面中所有的绝对链接
lst = list(resp.html.absolute_links)
print(lst)

因为是第一次使用render函数,需要安装chromium,这里需要花费一定的时间,请耐心等待。

在上述示例中,response.html.absolute_links会返回一个包含页面中所有绝对链接的集合(Set)。可以使用for循环遍历并打印其中的链接。

4.图片下载

   urllib.request.urlretrieve函数是Python标准库中urllib.request模块提供的一个方法,用于从指定的URL下载文件并保存到本地。

下面是urllib.request.urlretrieve()函数的完整参数说明:

  • url必需,要下载的文件的URL地址

  • filename必需,保存文件的本地路径和文件名。如果未指定此参数,则会将文件保存到临时目录中,返回保存的临时文件名。

  • reporthook可选,一个回调函数,用于显示下载进度。可以是一个自定义的回调函数,格式为 reporthook(count, blockSize, totalSize),其中count表示已经下载的数据块数量,blockSize表示每个数据块的大小,totalSize表示要下载的文件的总大小。默认情况下,不会显示下载进度。

  • data可选,要发送的额外数据。可以是一个字节流(str或bytes类型)或者一个文件对象。如果指定了此参数,urlretrieve()函数会使用POST请求发送数据。

  • headers可选,一个字典类型,表示发送请求时的头部信息。

  • origin_req_host可选,字符串类型,表示原始请求的主机名。用于在重定向时设置 Referer 头部。默认情况下,origin_req_hostNone

  • unverifiable可选,布尔值,表示请求是否可验证。如果设置为True,则会跳过某些HTTPS验证步骤。默认值为False

注意:urllib.request.urlretrieve()函数的执行会阻塞当前线程,直到下载完成。

入门案例:

参考地址:卡通4K手机壁纸_高清卡通手机桌面图片_极品桌面

可先通过浏览器的XPath工具方式定位元素具体地址,如下:

基本代码

# 通过xpath获取页面中满足条件的图片
urls = resp.html.xpath("""//a/img/@data-original""")
for url in urls:print(f"正在下载【"+url+"】,请稍等...")urllib.request.urlretrieve(url,f"images/{uuid.uuid4()}.jpg")
调用urllib.request.urlretrieve()函数时,可以通过提供一个回调函数来显示下载进度。如下所示:def show(count, blockSize, totalSize):"""回调函数用于显示下载进度:param count: 已经下载的数据块数量:param blockSize: 每个数据块的大小:param totalSize: 要下载的文件的总大小:return:"""percent = round((count * blockSize / totalSize),1) * 100print(f"正在下载: {percent}%")time.sleep(0.1)# 通过xpath获取页面中满足条件的图片
urls = resp.html.xpath("""//a/img/@data-original""")
for url in urls:print(f"正在下载【"+url+"】,请稍等...")urllib.request.urlretrieve(url,f"images/{uuid.uuid4()}.jpg",show)

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

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

相关文章

嵌入式UI开发-lvgl+wsl2+vscode系列:4、动画(Animations)

文章目录 一、前言二、动画示例1、示例1(基础按钮label的组合动画)2、示例2(回放效果动画)3、示例3(贝塞尔曲线3动画)4、示例4(动画时间轴) 三、最后 一、前言 接下来我们进行动画的…

Golang | Leetcode Golang题解之第101题对称二叉树

题目: 题解: func isSymmetric(root *TreeNode) bool {u, v : root, rootq : []*TreeNode{}q append(q, u)q append(q, v)for len(q) > 0 {u, v q[0], q[1]q q[2:]if u nil && v nil {continue}if u nil || v nil {return false}if …

JWT使用方法

目录 基础概念 依赖 生成令牌 工具类 控制层 解析令牌 工具类 网关过滤器 效果 基础概念 Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点…

深入解读力扣154题:寻找旋转排序数组中的最小值 II(多种方法及详细ASCII图解)

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容,和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣! 推荐:数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航: LeetCode解锁100…

弘君资本:沪指跌0.46%,电力板块逆市爆发,半导体板块强势

28日,沪指早盘窄幅震动,午后回落走低;深证成指、创业板指大幅下探;两市成交额小幅萎缩。 截至收盘,沪指跌0.46%报3109.57点,深证成指跌1.23%报9391.05点,创业板指跌1.35%报1806.25点&#xff0c…

Windows 11 HBuilder X的安装和环境搭建教程

文章目录 目录 文章目录 安装流程 小结 概要安装流程技术细节小结 概要 HBuilder X是一个由DCloud推出的集成开发环境(IDE),主要用于构建基于HTML、CSS和JavaScript的跨平台应用程序,如微信小程序、App、H5等。它提供了丰富的功能…

【Unity】颜色混合计算

在图形渲染中,颜色混合(Color Blending)是指将多个颜色值组合在一起以生成最终显示的颜色。颜色混合技术广泛用于处理半透明效果、光照效果和后期处理效果。以下是一些常见的颜色混合模式: 1. 正常混合(Normal Blendi…

简单四步完成基于云服务器ARL资产侦察灯塔系统搭建

简单四步完成基于云服务器ARL资产侦察灯塔系统搭建及使用 前言 官网介绍:ARL全称-Asset Reconnaissance Lighthouse,中文含义:资产侦察灯塔系统。 旨在快速侦察与目标关联的互联网资产,构建基础资产信息库。 协助甲方安全团队或…

DragonKnight CTF复现(一)

这次的 re 题也是挺难的,按 wp 来学习一波 elec_go 下次遇到这种给了很多东西,又不知道怎么分析的,先百度一下。 Electron程序逆向(asar归档解包)_asar解包-CSDN博客 [原创] electron开发、打包与逆向分析-软件逆向-…

AutoDL搭建 ChatGLM3

租用新实例 这里选择的西北 B 区、RTX 409024GB 创建虚拟环境并激活 # 安装虚拟环境至数据盘 conda create --prefix /root/autodl-tmp/envs/chatglm3-demo python3.10# 激活虚拟环境 conda activate /root/autodl-tmp/envs/chatglm3-demo拉取ChatGLM3仓库代码 # 开启学术…

代码随想录算法训练营第七天| 454.四数相加II 、383. 赎金信、 15. 三数之和、18. 四数之和

454.四数相加II 题目链接: 454.四数相加II 文档讲解:代码随想录 状态:没做出来,没想到考虑重复的情况! 题解: public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {// 结果计数…

Python调用科大讯飞在线语音合成API --内附完整项目

一,注册讯飞账号,并实名制。 讯飞开放平台-以语音交互为核心的人工智能开放平台 (xfyun.cn) 二、找到音频合成,按页面提示申请免费试用。 在线语音合成_免费试用-讯飞开放平台 (xfyun.cn) 三、申请免费使用后,找到API信息如下…

vscode远程登录阿里云服务器【使用密钥方式--后期无需再进行密码登录】【外包需要密码】

1:windows主机上生成【私钥】【公钥】 1.1生成公钥时不设置额外密码 1.2生成公钥时设置额外密码【给外包人员使用的方法】 2:在linux服务器中添加【公钥】 3:本地vscode连接linux服务器的配置 操作流程如下 1.1本地终端中【生成免密登录…

从0到100,渠道码如何成为SaaS企业增长的加速器

在当今数字化时代,企业的增长策略已不再是单一和线性的。渠道码的出现,为SaaS(软件即服务)企业提供了一种全新的、多维度的增长途径,真正实现了从0到100的快速增长。 一、渠道码的高可定制性和灵活性,为Sa…

基于.NetCore和ABP.VNext的项目实战二:Swagger

Mag.Blog.Swagger层添加Volo.Abp.AspNetCore和Swashbuckle.AspNetCore包,引用实体层.Domain 添加模块类MagBlogSwaggerModule.cs,依赖MagBlogDomainModule模块,并且重写ConfigureServices和OnApplicationInitialization方法 namespace Mag.Blog.Swagger {[DependsOn(typeof…

错误提示:“由于找不到steam_api.dll,无法继续执行代码”修复方法,缺少steam_api.dll文件原因

在尝试运行某些游戏或程序时,用户可能会遇到一个常见的错误提示:“由于找不到steam_api.dll,无法继续执行代码”。这个错误信息表明,系统在启动程序或游戏时无法定位到必要的steam_api.dll文件,这是一个关键的动态链接…

香橙派 AIpro的NPU随手记体验日记

昇腾AI 技术路线 8TOPS INT8(FP16)AI算力 LPDDR4X 8GB/16GB 📅 20240525 开放了原理图和源码,功能接口就不描述了手册都有描述,新手好好学习可以从底层覆盖到应用一个载板拿下 完成香橙派AIpro上手体验 镜像安装&am…

C++学习---string模拟实现(2)

1.随机插入一个字符串 (1)insert函数插入一个字符的方法我们在之前的模拟实现里面已经搞过了,那个里面要注意的是这个全体向后挪动的循环过程,这个里面我们要实现的是插入字符串的模拟实现; (2&#xff0…

网上3d全景虚拟交互展馆沉浸式体验让客户和使用者都满意

在数字化浪潮席卷而来的今天,3D场景网站已成为众多行业展现创意与实力的新舞台。然而,传统的3D建模软件往往因其复杂性和高门槛,让许多渴望创建逼真3D场景的用户望而却步。 幸运的是,华锐视点推出了搭建3D场景网站的编辑器——一款…

怎么做图片海报二维码?扫码查看图片内容

现在很多的宣传推广海报会放入二维码中,然后将二维码分享给用户后,通过扫码的方式来查看图片内容,从而获取自己需要的信息,经常在活动宣传、商品推广、旅游攻略等场景下使用。二维码可以提供更加便捷的内容获取方式,让…