图片懒加载、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:\爬虫\课件\day03\Spider3\selenium&PhanmJs\chromedriver.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:\爬虫\课件\day03\phantomjs-2.1.1-windows\bin\phantomjs.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()
图片懒加载、selenium和PhantomJS的更多相关文章
- 爬虫之 图片懒加载, selenium , phantomJs, 谷歌无头浏览器
一.图片懒加载 懒加载 : JS 代码 是页面自然滚动 window.scrollTo(0,document.body.scrollHeight) (重点) bro.execute_ ...
- 08.Python网络爬虫之图片懒加载技术、selenium和PhantomJS
引入 今日概要 图片懒加载 selenium phantomJs 谷歌无头浏览器 知识点回顾 验证码处理流程 今日详情 动态数据加载处理 一.图片懒加载 什么是图片懒加载? 案例分析:抓取站长素材ht ...
- Python网络爬虫之图片懒加载技术、selenium和PhantomJS
引入 图片懒加载 selenium phantomJs 谷歌无头浏览器 知识点回顾 验证码处理流程 动态数据加载处理 一.图片懒加载 什么是图片懒加载? 案例分析:抓取站长素材http://sc.ch ...
- Python爬虫之图片懒加载技术、selenium和PhantomJS
一.引入 2.概要 图片懒加载 selenium phantomJs 谷歌无头浏览器 3.回顾 验证码处理流程 一.今日详情 动态数据加载处理 1.图片懒加载 什么是图片懒加载? 案例分析:抓取站长素 ...
- 爬虫之图片懒加载技术、selenium和PhantomJS
爬虫之图片懒加载技术.selenium和PhantomJS 图片懒加载 selenium phantomJs 谷歌无头浏览器 一.图片懒加载 什么是图片懒加载? 案例分析:抓取站长素材http:/ ...
- 图片懒加载,Selenium,PhantomJS
引入 今日概要 图片懒加载 selenium phantomJs 谷歌无头浏览器 知识点回顾 验证码处理流程 今日详情 动态数据加载处理 一.图片懒加载 什么是图片懒加载? 案例分析:抓取站长素材ht ...
- 爬虫(七)图片懒加载技术、selenium和PhantomJS
动态数据加载处理 一.图片懒加载 什么是图片懒加载? 案例分析:抓取站长素材http://sc.chinaz.com/中的图片数据 #!/usr/bin/env python # -*- coding ...
- python爬虫之图片懒加载、selenium和phantomJS
一.什么是图片懒加载 在网页中,常常需要用到图片,而图片需要消耗较大的流量.正常情况下,浏览器会解析整个HTML代码,然后从上到下依次加载<img src="xxx"> ...
- 爬虫之图片懒加载技术、selenium工具与PhantomJS无头浏览器
图片懒加载技术 selenium爬虫简单使用 2.1 selenium简介 2.2 selenium安装 2.3 selenium简单使用 2.3.1 selenium使用案例 2.3.2 selen ...
随机推荐
- Ansible安装部署以及常用模块详解
一. Ansible 介绍Ansible是一个配置管理系统configuration management system, python 语言是运维人员必须会的语言, ansible 是一个基于py ...
- 剑指Offer_编程题_22
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序 ...
- 纯js Ajax 请求
var XMLHttpReq; function createXMLHttpRequest() { if(window.ActiveXObject ) { try { XMLHttpReq = new ...
- Mac 终端美化方法
美化终端,主要是主题,字体,命令行提示3个方面. 主题 使用的主题是Solarized Dark主题. 安装主题: git clone git://github.com/altercation/sol ...
- NOI-OJ 1.13 ID:34 确定进制
整体思路 对于任意的p,q,r,可能使得p*q=r的最小进制应该是p,q,r三个数的所有数位中最大的数字+1,例如,6,9,42三个数中所有数位中最大的数字是9,故可能成立的最小进制是9+1,即10. ...
- JaVa第二周学习总结
第一周学习的时候上传图片用的是网站外链然后导致出现了极为尴尬的情形...然后我就把第一周的全改成本地上传了. 首先列出所做任务 1 安装IDEA 2学习二三章视频,课本 3调试代码,上传码云 4总结问 ...
- Spark Java API 计算 Levenshtein 距离
Spark Java API 计算 Levenshtein 距离 在上一篇文章中,完成了Spark开发环境的搭建,最终的目标是对用户昵称信息做聚类分析,找出违规的昵称.聚类分析需要一个距离,用来衡量两 ...
- Python DB operation
mysql http://www.cnblogs.com/zhangzhu/archive/2013/07/04/3172486.html 1.连接到本机上的MYSQL.首先打开DOS窗口,然后进入目 ...
- CRMEB客户管理+电商管理系统帮助文档,送给有需要的人
本项目还在不断开发完善中,如有建议或问题请言
- Web从入门到放弃<4>
1,插入 如下html: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...