100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Python:图片懒加载技术

Python:图片懒加载技术

时间:2020-06-02 06:59:51

相关推荐

Python:图片懒加载技术

一. 案例分析:抓取站长素材/中的图片数据

#!/usr/bin/env python# -*- coding:utf-8 -*-import requestsfrom lxml import etreeif __name__ == "__main__":url = '/tupian/gudianmeinvtupian.html'headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',}#获取页面文本数据response = requests.get(url=url,headers=headers)response.encoding = 'utf-8'page_text = response.text#解析页面数据(获取页面中的图片链接)#创建etree对象tree = etree.HTML(page_text)div_list = tree.xpath('//div[@id="container"]/div')#解析获取图片地址和图片的名称for div in div_list:image_url = div.xpath('.//img/@src')image_name = div.xpath('.//img/@alt')print(image_url) #打印图片链接print(image_name)#打印图片名称

运行结果观察发现,我们可以获取图片的名称,但是链接获取的为空,检查后发现xpath表达式也没有问题,究其原因出在了哪里呢?

图片懒加载概念:

图片懒加载是一种网页优化技术。图片作为一种网络资源,在被请求时也与普通静态资源一样,将占用网络资源,而一次性将整个页面的所有图片加载完,将大大增加页面的首屏加载时间。为了解决这种问题,通过前后端配合,使图片仅在浏览器当前视窗内出现时才加载该图片,达到减少首屏图片请求数的技术就被称为“图片懒加载”。网站一般如何实现图片懒加载技术呢?在网页源码中,在img标签中首先会使用一个“伪属性”(通常使用src2,original…)去存放真正的图片链接而并非是直接存放在src属性中。当图片出现到页面的可视化区域中,会动态将伪属性替换成src属性,完成图片的加载。

站长素材案例后续分析:通过细致观察页面的结构后发现,网页中图片的链接是存储在了src2这个伪属性中

'''遇到问题没人解答?小编创建了一个Python学习交流QQ群:85766 寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!'''#!/usr/bin/env python# -*- coding:utf-8 -*-import requestsfrom lxml import etreeif __name__ == "__main__":url = '/tupian/gudianmeinvtupian.html'headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',}#获取页面文本数据response = requests.get(url=url,headers=headers)response.encoding = 'utf-8'page_text = response.text#解析页面数据(获取页面中的图片链接)#创建etree对象tree = etree.HTML(page_text)div_list = tree.xpath('//div[@id="container"]/div')#解析获取图片地址和图片的名称for div in div_list:image_url = div.xpath('.//img/@src'2) #src2伪属性image_name = div.xpath('.//img/@alt')print(image_url) #打印图片链接print(image_name)#打印图片名称

二. 利用selenuim 模拟浏览器滑动到底部, 加载数据.

class ProductSpider(scrapy.Spider):

name = “Product1688”

start_urls = []

'''遇到问题没人解答?小编创建了一个Python学习交流QQ群:85766 寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!'''def __init__(self, **kwargs):# 加载 chrome driver, 它的下载地址位于 /a//chromedriver/super().__init__(**kwargs)self.driver = webdriver.Chrome('/path/to/your/chromedriver')self.wait = WebDriverWait(self.driver, 10)def parse(self, response):self.driver.get(response.url)# 打开页面后,滑动至页面底部self.scroll_until_loaded()# 以 xpath 寻找商品名(标题 )title = self.driver.find_element_by_xpath('//*[@id="mod-detail-title"]/h1')# 以 xpath 寻找商品主图片main_images_elements = self.driver.find_elements_by_xpath('//*[@id="dt-tab"]/div/ul/li/div/a/img')# 以 xpath 寻找商品详情图片detail_images_elements = \self.driver.find_elements_by_xpath('//*[@id="desc-lazyload-container"]/p/span/strong/img')item = ProductItem()main_images = []detail_images = []# 获取商品主图的网络地址,针对商品主图片尺寸的特殊处理for image in main_images_elements:main_images.append(image.get_attribute('src').replace('60x60.', ''))# 获取商品详情图片的网络地址for image in detail_images_elements:detail_images.append(image.get_attribute('src'))item['title'] = title.textitem['main_image_count'] = len(main_images)item['image_urls'] = main_images + detail_imagesreturn item# 模拟浏览器页面滚到页面底部的行为def scroll_until_loaded(self):check_height = self.driver.execute_script("return document.body.scrollHeight;")while True:self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")try:self.wait.until(lambda driver: self.driver.execute_script("return document.body.scrollHeight;") > check_height)check_height = self.driver.execute_script("return document.body.scrollHeight;")except TimeoutException:break

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。