zoukankan      html  css  js  c++  java
  • 图片懒加载、selenium和PhantomJS

    1、图片懒加载

    1.1 概念及实现原理

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

    1.2 站长素材案例

    import requests
    from lxml import etree
    
    url = 'http://sc.chinaz.com/tupian/dadanrenti.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
    terr=etree.HTML(page_text)
    # 解析文本数据
    div_list=terr.xpath('//*[@id="container"]/div')
    
    for div in div_list:
        # 正常加载的图片标签是src,懒加载标签为src2
        img_url=div.xpath('./div/a/img/@src2')
        img_name=div.xpath('./p/a/text()')
        print(img_url)
        print(img_name)
    

    2. selenium

    2.1 定义及安装

    • 是Python的一个第三方库,对外提供的接口可以操作浏览器,然后让浏览器完成自动化的操作
    • 安装:
    1、pip install selenium
    2、获取某一款浏览器的驱动程序(以谷歌浏览器为例) 
        2.1 谷歌浏览器驱动下载地址:http://chromedriver.storage.googleapis.com/index.html
        2.2 下载的驱动程序必须和浏览器的版本统一,大家可以根据http://blog.csdn.net/huilan_same/article/details/51896672
        中提供的版本映射表进行对应
    

    2.2 代码

    from selenium import webdriver
    from time import sleep
    # 指定驱动路径
    bro = webdriver.Chrome(r'F:爬虫课件day03Spider3selenium&PhanmJschromedriver.exe')
    #打开浏览器发起请求
    bro.get('https://www.baidu.com')
    
    sleep(2)
    #定位到搜索框
    my_text = bro.find_element_by_id('kw')
    #向搜索框中输入一个关键字
    my_text.send_keys('人民币')
    sleep(2)
    
    #定位到搜索按钮
    my_button = bro.find_element_by_id('su')
    my_button.click()
    sleep(5)
    #关闭浏览器
    bro.quit()
    

    3. PhantomJS

    3.1 定义

    • PhantomJS是一款无界面的浏览器,其自动化操作流程和上述操作谷歌浏览器是一致的。由于是无界面的,为了能够展示自动化操作流程,PhantomJS为用户提供了一个截屏的功能,使用save_screenshot函数实现

    3.2 代码

    from selenium import webdriver
    from time import sleep
    
    bro = webdriver.PhantomJS(r'F:爬虫课件day03phantomjs-2.1.1-windowsinphantomjs.exe')
    
    #打开浏览器发起请求
    bro.get('https://www.baidu.com')
    bro.save_screenshot('./首页.jpg')#用来截屏
    sleep(2)
    
    #定位到搜索框
    my_text = bro.find_element_by_id('kw')
    #向搜索框中输入一个关键字
    my_text.send_keys('人民币')
    bro.save_screenshot('./ggg.jpg') # 指定保存的路径
    sleep(2)
    
    #定位到搜索按钮
    my_button = bro.find_element_by_id('su')
    my_button.click()
    
    sleep(5)
    bro.save_screenshot('./33.jpg')
    #关闭浏览器
    bro.quit()
  • 相关阅读:
    链表--判断一个链表是否为回文结构
    矩阵--“之”字形打印矩阵
    二叉树——平衡二叉树,二叉搜索树,完全二叉树
    链表--反转单向和双向链表
    codeforces 490C. Hacking Cypher 解题报告
    codeforces 490B.Queue 解题报告
    BestCoder19 1001.Alexandra and Prime Numbers(hdu 5108) 解题报告
    codeforces 488A. Giga Tower 解题报告
    codeforces 489C.Given Length and Sum of Digits... 解题报告
    codeforces 489B. BerSU Ball 解题报告
  • 原文地址:https://www.cnblogs.com/quqinchao/p/9794609.html
Copyright © 2011-2022 走看看