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()

最新文章

  1. Bad Request - Request Too Long
  2. 网站appache的ab命令压力测试性能
  3. JS之BOM、客户端检测和DOM
  4. HackerRank training-the-army
  5. Educational Codeforces Round 15 Road to Post Office
  6. [Papers]NSE, $\p_3u$, Lebesgue space [Cao, DCDSA, 2010]
  7. Launcher2编译
  8. JPA---一对一关系
  9. 与非CCR代码互操作
  10. javascript设计模式2
  11. java常用重构优化总结--自己亲身体验
  12. PHP的Cookie、Session和跟Laravel相关的几点了解
  13. Salesforce使用truncate清空数据库
  14. 测试开发技术:DOM中 innerHTML、innerText、outerHTML、outerText的区别
  15. the c programing language 学习过程8
  16. (七十)Xcode5及以上对于状态栏和导航栏样式的设定方法
  17. GlusterFS分布式存储学习笔记
  18. 力攻突破M20的5分钟BOLL
  19. 【干货】一文理解Druid原理架构(时序数据库,不是ali的数据库连接池)
  20. MongoDB 聚合嵌入的数组(扁平化数据+管道)

热门文章

  1. SQL注入个人理解及思路(包括payload和绕过的一些方式)
  2. P1002 A+B for Polynomials (25分)
  3. 全文索引-ElasticSearch
  4. 剑指offer 把数组排成最小的数 atoi和itoa,pow
  5. Day9 - F - Monkey and Banana HDU - 1069
  6. LATTICE 编程烧录器HW-USBN-2B使用说明
  7. 12541:TNS无监听状态
  8. $('#myModal').modal('show') //显示$('#myModal').modal('hide')隐藏
  9. SQL statement ignored
  10. Java 定时循环运行程序