本文主要是介绍爬虫中请求图片链接不正确的解决办法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题解决
在爬取站长之家的图片的时候遇到一个问题,解析图片的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,'下载完毕!!')
这篇关于爬虫中请求图片链接不正确的解决办法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!