(五)selenuim和phantonJs处理网页动态加载数据的爬取
selenuim和phantonJs处理网页动态加载数据的爬取
一 图片懒加载
- 自己理解------就是在打开一个页面的时候,图片数量特别多,图片加载会增加服务器的压力,所以我们在这个时候,就会用到---懒加载,,网页解析是从上往下的。在解析的过程里,如果遇见资源了,浏览器会再次请求的。但是一个网页可能存在很多请求的资源。
 - 图片懒加载是一种网页优化技术。图片作为一种网络资源,在被请求时也与普通静态资源一样,将占用网络资源,而一次性将整个页面的所有图片加载完,将大大增加页面的首屏加载时间。为了解决这种问题,通过前后端配合,使图片仅在浏览器当前视窗内出现时才加载该图片,达到减少首屏图片请求数的技术就被称为“图片懒加载”
 网站一般如何实现图片懒加载技术呢?
在网页源码中,在img标签中首先会使用一个“伪属性”(通常使用src2,original......)去存放真正的图片链接而并非是直接存放在src属性中。当图片出现到页面的可视化区域中,会动态将伪属性替换成src属性,完成图片的加载。
'''
站长素材为例 http://sc.chinaz.com/
下载里面的高清图片
'''
import requests
from lxml import etree headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
} url = 'http://sc.chinaz.com/tupian/eluosi.html' page_text = requests.get(url=url, headers=headers).text tree = etree.HTML(page_text)
div_list = tree.xpath('//div[@id="container"]/div') for div in div_list:
img_url = div.xpath('./div/a/img/@src2')[] # ./div/a/img/@src
# print(img_url) #打印的是空值,因为在爬虫时没有拿到真正的url,我们需要将src改成src2就可以了 pic = requests.get(url=img_url,headers=headers).content
print(pic)
imgName = img_url.split('/')[-]
filePath = './pic/' + imgName
with open(filePath,'wb') as f:
f.write(pic)
二.selenium
1 什么是selenium
selenium是python中对外提供的接口可以操作浏览器,然后让浏览器完成自动化的操作.
2 环境搭建
安装 pip install selenium
获取某一款浏览器的驱动程序(以谷歌浏览器为例)
谷歌浏览器驱动下载地址:
http://chromedriver.storage.googleapis.com/index.html下载的驱动程序必须和浏览器的版本统一,大家可以根据
http://blog.csdn.net/huilan_same/article/details/51896672中提供的版本映射表进行对应
import time
from selenium import webdriver b = webdriver.Chrome(executable_path=r'D:\爬虫\part_one\驱动\chromedriver\chromedriver.exe') # 上面下载的驱动
time.sleep() url = 'http://www.baidu.com'
b.get(url=url) myText = b.find_element_by_id('kw') # 找到百度的input框 输入 '美女'
myText.send_keys('美女') myButton = b.find_element_by_id('su') # 找到百度的按钮
myButton.click()
time.sleep() b.quit()
三.phantomJs
PhantomJS是一款无界面的浏览器,其自动化操作流程和上述操作谷歌浏览器是一致的。由于是无界面的,为了能够展示自动化操作流程,PhantomJS为用户提供了一个截屏的功能,使用save_screenshot函数实现
import time
from selenium import webdriver
# PhantomJS
b = webdriver.PhantomJS(executable_path=r'C:\Users\xxxxxx\Desktop\课上代码\part_one\4.selenium&phantomjs\
phantomjs-2.1.1-windows\bin\phantomjs.exe')
time.sleep() url = 'http://www.baidu.com'
b.get(url=url) b.save_screenshot('./1.png') # 加一个截图 myText = b.find_element_by_id('kw')
myText.send_keys('美女')
b.save_screenshot('./2.png') # 加一个截图 myButton = b.find_element_by_id('su')
myButton.click()
b.save_screenshot('./3.png') # 加一个截图 time.sleep()
b.quit()
(五)selenuim和phantonJs处理网页动态加载数据的爬取的更多相关文章
- 爬虫开发6.selenuim和phantonJs处理网页动态加载数据的爬取
		
selenuim和phantonJs处理网页动态加载数据的爬取阅读量: 1203 动态数据加载处理 一.图片懒加载 什么是图片懒加载? 案例分析:抓取站长素材http://sc.chinaz.com/ ...
 - 爬虫--selenuim和phantonJs处理网页动态加载数据的爬取
		
1.谷歌浏览器的使用 下载谷歌浏览器 安装谷歌访问助手 终于用上谷歌浏览器了.....激动 问题:处理页面动态加载数据的爬取 -1.selenium -2.phantomJs 1.selenium 二 ...
 - selenuim和phantonJs处理网页动态加载数据的爬取
		
一.图片懒加载 什么是图片懒加载? 案例分析:抓取站长素材http://sc.chinaz.com/中的图片数据 #!/usr/bin/env python # -*- coding:utf-8 -* ...
 - 6-----selenuim和phantonJs处理网页动态加载数据的爬取
		
动态数据加载处理 一.图片懒加载 什么是图片懒加载? 案例分析:抓取站长素材http://sc.chinaz.com/中的图片数据 #!/usr/bin/env python # -*- coding ...
 - 微信小程序(五) 利用模板动态加载数据
		
利用模板动态加载数据,其实是对上一节静态数据替换成动态数据:
 - Extjs-树 Ext.tree.TreePanel 动态加载数据
		
先上效果图 1.说明Ext.tree.Panel 控件是树形控件,大家知道树形结构在软件开发过程中的应用是很广泛的,树形控件的数据有本地数据.服务器端返回的数据两种.对于本地数据的加载,在extjs的 ...
 - AppCan学习笔记----关闭页面listview动态加载数据
		
AppCan页面关闭 AppCan 的页面是由两个HTML组成,如果要完全关闭的话需要在主HTML eg.index.html中关闭,关闭方法:appcan.window.close(-1); 管道 ...
 - [JS前端开发] js/jquery控制页面动态加载数据 滑动滚动条自动加载事件
		
页面滚动动态加载数据,页面下拉自动加载内容 相信很多人都见过瀑布流图片布局,那些图片是动态加载出来的,效果很好,对服务器的压力相对来说也小了很多 有手机的相信都见过这样的效果:进入qq空间,向下拉动空 ...
 - mui 动态加载数据出现的问题处理 (silder轮播组件  indexedList索引列表  下拉刷新不能继续加载数据)
		
mui-slider 问题:动态给mui的图片轮播添加图片,轮播不滚动. 解决:最后把滚动轮播图片的mui(".mui-slider").slider({interval: 300 ...
 
随机推荐
- c# 事件3
			
1.什么是事件,使对象或者类具有通知功能的成员.//为了解决字段在外部被滥用,推出了事件 事件的功能能=通知+可选的事件参数(具体的详细信息,包括谁发送了消息,发送的什么消息) 使用:用于对象或者类件 ...
 - 二、点击导出按钮创建excle写入内容后下载功能实现
			
/*涉及的jar包1)biframework.jar用于实现分页功能2)poi-3.7-20101029.jar:读取.创建.修改excle.word.ppt的Java APIApache POI是创 ...
 - JS 函数创建、封装、调用
			
一.简单函数创建.封装 第三种就是构造函数 function fun(a,b){ this.firstName=a this.lastName=b } var x=new myFun(Jhon,Dav ...
 - Golang gin开源实例——接口
			
Github地址 https://github.com/EDDYCJY/go-gin-example 返回值 字段:code.msg.data 举例 # 失败 { , "msg": ...
 - 「AMPPZ2014」The Prices
			
传送门 Luogu团队题链接 解题思路 看到 \(m\) 这么小,马上想到状压 \(\text{DP}\). 设 \(dp[i][j]\) 表示在前 \(i\) 家商店中已买商品的状态为 \(j\) ...
 - Python2 和 Python3 编码问题
			
基本存储单元 位(bit, b):二进制数中的一个数位,可以是0或者1,是计算机中数据的最小单位. 字节(Byte,B):计算机中数据的基本单位,每8位组成一个字节. 1B = 8b 各种信息在计算机 ...
 - IdentityServer4专题之一:OAuth2.0介绍
			
1.OAuth 2.0授权方式介绍: OAuth 2.0 的标准是 RFC 6749 文件.该文件先解释了 OAuth 是什么: OAuth 引入了一个授权层,用来分离两种不同的角色:客户端和资源所有 ...
 - 移动端web(1)
			
引入 <meta name="viewport" content="wcodeth=device-wcodeth, initial-scale=1, ...
 - C语言整理复习——指针
			
指针是C的精华,不会指针就等于没学C.但指针又是C里最难理解的部分,所以特意写下这篇博客整理思路. 一.指针类型的声明 C的数据类型由整型.浮点型.字符型.布尔型.指针这几部分构成.前四种类型比较好理 ...
 - vSphere 高级特性FT配置与管理
			
内容预览: 1. Fault Tolerance 的工作方式 2. 5.X版本FT使用的vLockstep技术 3. 6.X版本FT使用的Fast Checkpointing技术 4. FT不支持的v ...