一.什么是图片懒加载?

案例分析:抓取站长素材http://sc.chinaz.com/中的图片数据

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import requests
from lxml import etree

if __name__ == "__main__":
     url = 'http://sc.chinaz.com/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[@>)
     #解析获取图片地址和图片的名称
     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标签中设置一个伪属性,去存放正式的图片链接而并非直接存放在src属性中,当图片出现到页面的可视化区域中,会动态将伪属性替换层src属性,完成如片加载.

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

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import requests
from lxml import etree

if __name__ == "__main__":
     url = 'http://sc.chinaz.com/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[@>)
     #解析获取图片地址和图片的名称
     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)#打印图片名称

 二.selenium

什么是selenium:

是一个python的第三方库,对外提供的接口可以操作浏览器,然后让浏览器完成自动化操作.

python环境搭建

  安装selenium:pip install selenium

  获取某一款浏览器的驱动程序(以谷歌浏览器为例)

    谷歌浏览器驱动下载地址: http://chromedriver.storage.googleapis.com/index.html

    下载的驱动程序必须和浏览器的版本统一,大家可以根据:http://blog.csdn.net/huilan_same/article/details/51896672中提供的版本映射表进行对应

效果展示:

from selenium import webdriver
from time import sleep

# 后面是你的浏览器驱动位置,记得前面加r'','r'是防止字符转义的
driver = webdriver.Chrome(r'驱动程序路径')
# 用get打开百度页面
driver.get("http://www.baidu.com")
# 查找页面的“设置”选项,并进行点击
driver.find_elements_by_link_text('设置')[0].click()
sleep(2)
# # 打开设置后找到“搜索设置”选项,设置为每页显示50条
driver.find_elements_by_link_text('搜索设置')[0].click()
sleep(2)

# 选中每页显示50条
m = driver.find_element_by_id('nr')
sleep(2)
m.find_element_by_xpath('//*[@>).click()
m.find_element_by_xpath('.//option[3]').click()
sleep(2)

# 点击保存设置
driver.find_elements_by_class_name("prefpanelgo")[0].click()
sleep(2)

# 处理弹出的警告页面   确定accept() 和 取消dismiss()
driver.switch_to_alert().accept()
sleep(2)
# 找到百度的输入框,并输入 美女
driver.find_element_by_id('kw').send_keys('美女')
sleep(2)
# 点击搜索按钮
driver.find_element_by_id('su').click()
sleep(2)
# 在打开的页面中找到“Selenium - 开源中国社区”,并打开这个页面
driver.find_elements_by_link_text('美女_百度图片')[0].click()
sleep(3)

# 关闭浏览器
driver.quit()

百度页面