爬虫中请求图片链接不正确的解决办法

2023-11-23 18:59

本文主要是介绍爬虫中请求图片链接不正确的解决办法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题解决

  在爬取站长之家的图片的时候遇到一个问题,解析图片的src属性之后得到的链接不正确,用代码解析出来全都是这样的
在这里插入图片描述
可是在网页结构中查看明明是正确的
在这里插入图片描述

  那这对于一个小白来说就有点手足无措了,可是凭借我敏锐的洞察力发现里面有个属性"data-original"里面存的值和src里面的一模一样,紧接着我把代码中解析src属性更改成"data-original"之后就成功了,此时拿到图片链接的问题是解决了,那么作为一个日后想成为爬虫大佬的"坤"就必须了解这是为什么弄明白其中的原理

问题原因-懒加载


什么是懒加载呢?对于前端开发者来说一定不陌生

  • 懒加载(Lazy Loading)是一种页面优化技术,它延迟加载网页上的某些部分,以加速网页的加载速度和提高性能。
  • 在使用懒加载技术时,网页只会在用户需要访问它们时才会加载相关的资源,而不是一次性将所有资源都加载出来。比如,在使用懒加载技术的图片网站上,只有当用户滚动到页面上的某一部分时,该部分的图片才会开始加载。
  • 懒加载的优点包括:减少加载时间,提高网页性能,减小页面文件体积,降低带宽成本,减少服务器压力,提高用户体验等

  以上是官方解释,大白话说就是请求网页的时候先不加载图片或者一些资源文件,只有当用户看到的时候再加载,这无疑提高了网站的访问速度,用户体验等等,对于用户和网站的开发者来说这个技术百利无一害,但是苦了咱这些爬虫的人
  所以此时原因就是因为这个懒加载技术,图片没加载的时候是没有src属性的,但是网站的开发者一般会将图片的链接先放在其他自定义属性之中,我们只需要解析这个属性即可

实例

这次爬的网站"站长之家": https://sc.chinaz.com/tupian/jianzhutupian.html

import requests
from lxml import etree
url = "https://sc.chinaz.com/tupian/jianzhutupian.html"
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.50"
}
resp = requests.get(url,headers).content.decode('utf-8')et = etree.HTML(resp)img_list = et.xpath('//div[contains(@class,"tupian-list")]/div[contains(@class,"item")]/img')for img in img_list:#原始图片地址img_src = img.xpath('./@data-original')[0]print(img_src)#拼接替换成高清图片地址gq_src = "https:"+img_src.replace('scpic3','tppic').replace('s','big').replace('filebig','files').replace('imgbig','imgs')#获取图片名称title = img.xpath('./@alt')[0].replace("图片","")#获取图片二进制流byte_img = requests.get(gq_src,headers).contentfp = open('img'+title+".jpg",'wb')fp.write(byte_img)print(title,'下载完毕!!')
希望各位看完有所收获

这篇关于爬虫中请求图片链接不正确的解决办法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/420054

相关文章

Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题

《Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题》在爬虫工程里,“HTTPS”是绕不开的话题,HTTPS为传输加密提供保护,同时也给爬虫带来证书校验、... 目录一、核心问题与优先级检查(先问三件事)二、基础示例:requests 与证书处理三、高并发选型:

前端导出Excel文件出现乱码或文件损坏问题的解决办法

《前端导出Excel文件出现乱码或文件损坏问题的解决办法》在现代网页应用程序中,前端有时需要与后端进行数据交互,包括下载文件,:本文主要介绍前端导出Excel文件出现乱码或文件损坏问题的解决办法,... 目录1. 检查后端返回的数据格式2. 前端正确处理二进制数据方案 1:直接下载(推荐)方案 2:手动构造

Java 中的 equals 和 hashCode 方法关系与正确重写实践案例

《Java中的equals和hashCode方法关系与正确重写实践案例》在Java中,equals和hashCode方法是Object类的核心方法,广泛用于对象比较和哈希集合(如HashMa... 目录一、背景与需求分析1.1 equals 和 hashCode 的背景1.2 需求分析1.3 技术挑战1.4

Python实现简单封装网络请求的示例详解

《Python实现简单封装网络请求的示例详解》这篇文章主要为大家详细介绍了Python实现简单封装网络请求的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录安装依赖核心功能说明1. 类与方法概览2.NetHelper类初始化参数3.ApiResponse类属性与方法使用实

如何正确识别一台POE交换机的好坏? 选购可靠的POE交换机注意事项

《如何正确识别一台POE交换机的好坏?选购可靠的POE交换机注意事项》POE技术已经历多年发展,广泛应用于安防监控和无线覆盖等领域,需求量大,但质量参差不齐,市场上POE交换机的品牌繁多,如何正确识... 目录生产标识1. 必须包含的信息2. 劣质设备的常见问题供电标准1. 正规的 POE 标准2. 劣质设

javacv依赖太大导致jar包也大的解决办法

《javacv依赖太大导致jar包也大的解决办法》随着项目的复杂度和依赖关系的增加,打包后的JAR包可能会变得很大,:本文主要介绍javacv依赖太大导致jar包也大的解决办法,文中通过代码介绍的... 目录前言1.检查依赖2.更改依赖3.检查副依赖总结 前言最近在写项目时,用到了Javacv里的获取视频

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

Java中如何正确的停掉线程

《Java中如何正确的停掉线程》Java通过interrupt()通知线程停止而非强制,确保线程自主处理中断,避免数据损坏,线程池的shutdown()等待任务完成,shutdownNow()强制中断... 目录为什么不强制停止为什么 Java 不提供强制停止线程的能力呢?如何用interrupt停止线程s

SpringBoot请求参数传递与接收示例详解

《SpringBoot请求参数传递与接收示例详解》本文给大家介绍SpringBoot请求参数传递与接收示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录I. 基础参数传递i.查询参数(Query Parameters)ii.路径参数(Path Va

使用Python的requests库来发送HTTP请求的操作指南

《使用Python的requests库来发送HTTP请求的操作指南》使用Python的requests库发送HTTP请求是非常简单和直观的,requests库提供了丰富的API,可以发送各种类型的HT... 目录前言1. 安装 requests 库2. 发送 GET 请求3. 发送 POST 请求4. 发送