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

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

相关文章

Spring Boot中JSON数值溢出问题从报错到优雅解决办法

《SpringBoot中JSON数值溢出问题从报错到优雅解决办法》:本文主要介绍SpringBoot中JSON数值溢出问题从报错到优雅的解决办法,通过修改字段类型为Long、添加全局异常处理和... 目录一、问题背景:为什么我的接口突然报错了?二、为什么会发生这个错误?1. Java 数据类型的“容量”限制

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

Spring 请求之传递 JSON 数据的操作方法

《Spring请求之传递JSON数据的操作方法》JSON就是一种数据格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,因此JSON本质是字符串,主要负责在不同的语言中数据传递和交换,这... 目录jsON 概念JSON 语法JSON 的语法JSON 的两种结构JSON 字符串和 Java 对象互转

Python运行中频繁出现Restart提示的解决办法

《Python运行中频繁出现Restart提示的解决办法》在编程的世界里,遇到各种奇怪的问题是家常便饭,但是,当你的Python程序在运行过程中频繁出现“Restart”提示时,这可能不仅仅是令人头疼... 目录问题描述代码示例无限循环递归调用内存泄漏解决方案1. 检查代码逻辑无限循环递归调用内存泄漏2.

SpringMVC获取请求参数的方法

《SpringMVC获取请求参数的方法》:本文主要介绍SpringMVC获取请求参数的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下... 目录1、通过ServletAPI获取2、通过控制器方法的形参获取请求参数3、@RequestParam4、@

鸿蒙中Axios数据请求的封装和配置方法

《鸿蒙中Axios数据请求的封装和配置方法》:本文主要介绍鸿蒙中Axios数据请求的封装和配置方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.配置权限 应用级权限和系统级权限2.配置网络请求的代码3.下载在Entry中 下载AxIOS4.封装Htt

springboot filter实现请求响应全链路拦截

《springbootfilter实现请求响应全链路拦截》这篇文章主要为大家详细介绍了SpringBoot如何结合Filter同时拦截请求和响应,从而实现​​日志采集自动化,感兴趣的小伙伴可以跟随小... 目录一、为什么你需要这个过滤器?​​​二、核心实现:一个Filter搞定双向数据流​​​​三、完整代码

AJAX请求上传下载进度监控实现方式

《AJAX请求上传下载进度监控实现方式》在日常Web开发中,AJAX(AsynchronousJavaScriptandXML)被广泛用于异步请求数据,而无需刷新整个页面,:本文主要介绍AJAX请... 目录1. 前言2. 基于XMLHttpRequest的进度监控2.1 基础版文件上传监控2.2 增强版多

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La