(五)selenuim和phantonJs处理网页动态加载数据的爬取

时间:2022-11-03 17:24:11

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处理网页动态加载数据的爬取的更多相关文章

  1. 爬虫开发6.selenuim和phantonJs处理网页动态加载数据的爬取

    selenuim和phantonJs处理网页动态加载数据的爬取阅读量: 1203 动态数据加载处理 一.图片懒加载 什么是图片懒加载? 案例分析:抓取站长素材http://sc.chinaz.com/ ...

  2. 爬虫--selenuim和phantonJs处理网页动态加载数据的爬取

    1.谷歌浏览器的使用 下载谷歌浏览器 安装谷歌访问助手 终于用上谷歌浏览器了.....激动 问题:处理页面动态加载数据的爬取 -1.selenium -2.phantomJs 1.selenium 二 ...

  3. selenuim和phantonJs处理网页动态加载数据的爬取

    一.图片懒加载 什么是图片懒加载? 案例分析:抓取站长素材http://sc.chinaz.com/中的图片数据 #!/usr/bin/env python # -*- coding:utf-8 -* ...

  4. 6-----selenuim和phantonJs处理网页动态加载数据的爬取

    动态数据加载处理 一.图片懒加载 什么是图片懒加载? 案例分析:抓取站长素材http://sc.chinaz.com/中的图片数据 #!/usr/bin/env python # -*- coding ...

  5. 微信小程序(五) 利用模板动态加载数据

    利用模板动态加载数据,其实是对上一节静态数据替换成动态数据:

  6. Extjs-树 Ext.tree.TreePanel 动态加载数据

    先上效果图 1.说明Ext.tree.Panel 控件是树形控件,大家知道树形结构在软件开发过程中的应用是很广泛的,树形控件的数据有本地数据.服务器端返回的数据两种.对于本地数据的加载,在extjs的 ...

  7. AppCan学习笔记----关闭页面listview动态加载数据

    AppCan页面关闭 AppCan 的页面是由两个HTML组成,如果要完全关闭的话需要在主HTML eg.index.html中关闭,关闭方法:appcan.window.close(-1); 管道 ...

  8. [JS前端开发] js/jquery控制页面动态加载数据 滑动滚动条自动加载事件

    页面滚动动态加载数据,页面下拉自动加载内容 相信很多人都见过瀑布流图片布局,那些图片是动态加载出来的,效果很好,对服务器的压力相对来说也小了很多 有手机的相信都见过这样的效果:进入qq空间,向下拉动空 ...

  9. mui 动态加载数据出现的问题处理 (silder轮播组件 indexedList索引列表 下拉刷新不能继续加载数据)

    mui-slider 问题:动态给mui的图片轮播添加图片,轮播不滚动. 解决:最后把滚动轮播图片的mui(".mui-slider").slider({interval: 300 ...

随机推荐

  1. delphi检查url是否有效的方法

    function CheckUrl(url: string; TimeOut: integer = 5000): boolean;var hSession, hfile, hRequest: hInt ...

  2. javascript十六进制数字和ASCII字符之间转换

    var hex="0x29";//十六进制 var charValue = String.fromCharCode(hex);//生成Unicode字符 var charCode ...

  3. android 分段显示文本颜色控件

    效果: 使用: <com.bei.myapplication.app.ProgressTextView xmlns:ptv="http://schemas.android.com/ap ...

  4. Remote Desktop manager 连接后无法自动登录

    现象: Remote Desktop manager 连接后无法自动登录 用Windows 自带的远程桌面 可以自动登录 解决方法: 在指定站点 右键 Edit Entry. 如下图处打勾就可以了.

  5. jar文件内lib引用的jar插件修改后更新

    打包的java服务在第三方jar进行修改后,要更新线上的jar包时,直接替换原有lib引用的jar文件,会造成服务起不来, 可在本地clean install之后,用线上的classes文件夹替换本地 ...

  6. python中打印一个字符串中有多少个单词

    1.for实现: str1 = str.strip(input("please input a str:"))n = 1i = 0for i in range(len(str1)- ...

  7. Python-CSS入门

    一.架构分析 页面 => div的层级结构 => 具有采用哪些功能标签显示内容 结构层 > 位置层(布局层) > 内容层 二.css引入 - 行间式 <!-- 简单直接, ...

  8. selenium元素高亮显示

    selenium元素高亮显示: 采用js注入的方式,通过更改元素样式来实现. border:2px 边框  solid red 红色 def hightlight(self,element): &qu ...

  9. Oracle查询表结果添加到另一张表中

    转自:https://blog.csdn.net/lx870576109/article/details/78336695 把每一个知识点进行积累:Oracle数据库中将查询一张表的结果添加到另一张表 ...

  10. 排序算法&lpar;6&rpar;--exchang Sorting--交换排序&lbrack;1&rsqb;--Bubble Sort--冒泡排序

    1.基本思想 冒泡排序的基本思想是,对相邻的元素进行两两比较,顺序相反则进行交换,这样,每一趟会将最小或最大的元素“浮”到顶端,最终达到完全有序 2.实现原理 冒泡排序是一种简单的排序算法,根据顺序两 ...