引入php
今日概要css
知识点回顾html
今日详情python
动态数据加载处理jquery
一.图片懒加载web
- 运行结果观察发现,咱们能够获取图片的名称,可是连接获取的为空,检查后发现xpath表达式也没有问题,究其缘由出在了哪里呢?正则表达式
图片懒加载概念:chrome
图片懒加载是一种网页优化技术。图片做为一种网络资源,在被请求时也与普通静态资源同样,将占用网络资源,而一次性将整个页面的全部图片加载完,将大大增长页面的首屏加载时间。为了解决这种问题,经过先后端配合,使图片仅在浏览器当前视窗内出现时才加载该图片,达到减小首屏图片请求数的技术就被称为“图片懒加载”。windows
网站通常如何实现图片懒加载技术呢?后端
在网页源码中,在img标签中首先会使用一个“伪属性”(一般使用src2,original......)去存放真正的图片连接而并不是是直接存放在src属性中。当图片出现到页面的可视化区域中,会动态将伪属性替换成src属性,完成图片的加载。
站长素材案例后续分析:经过细致观察页面的结构后发现,网页中图片的连接是存储在了src2这个伪属性中
selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests没法直接执行JavaScript代码的问题 selenium本质是经过驱动浏览器,彻底模拟浏览器的操做,好比跳转、输入、点击、下拉等,来拿到网页渲染以后的结果,可支持多种浏览器
Selenium支持很是多的浏览器,如Chrome、Firefox、Edge等,还有Android、BlackBerry等手机端的浏览器。另外,也支持无界面浏览器PhantomJS。
webdriver 提供了一系列的元素定位方法,经常使用的有如下几种:
注意
一、find_element_by_xxx找的是第一个符合条件的标签,find_elements_by_xxx找的是全部符合条件的标签。
二、根据ID、CSS选择器和XPath获取,它们返回的结果彻底一致。
三、另外,Selenium还提供了通用方法find_element()
,它须要传入两个参数:查找方式By
和值。实际上,它就是find_element_by_id()
这种方法的通用函数版本,好比find_element_by_id(id)
就等价于find_element(By.ID, id)
,两者获得的结果彻底一致。
Selenium能够驱动浏览器来执行一些操做,也就是说可让浏览器模拟执行一些动做。比较常见的用法有:输入文字时用send_keys()
方法,清空文字时用clear()
方法,点击按钮时用click()
方法。示例以下:
在上面的实例中,一些交互动做都是针对某个节点执行的。好比,对于输入框,咱们就调用它的输入文字和清空文字方法;对于按钮,就调用它的点击方法。其实,还有另一些操做,它们没有特定的执行对象,好比鼠标拖曳、键盘按键等,这些动做用另外一种方式来执行,那就是动做链。
好比,如今实现一个节点的拖曳操做,将某个节点从一处拖曳到另一处,能够这样实现:
对于某些操做,Selenium API并无提供。好比,下拉进度条,它能够直接模拟运行JavaScript,此时使用execute_script()
方法便可实现,代码以下:
经过page_source
属性能够获取网页的源代码,接着就可使用解析库(如正则表达式、Beautiful Soup、pyquery等)来提取信息了。
使用Selenium,还能够方便地对Cookies进行操做,例如获取、添加、删除Cookies等。示例以下:
PhantomJS是一款无界面的浏览器,其自动化操做流程和上述操做谷歌浏览器是一致的。因为是无界面的,为了可以展现自动化操做流程,PhantomJS为用户提供了一个截屏的功能,使用save_screenshot函数实现。
因为PhantomJs最近已经中止了更新和维护,因此推荐你们可使用谷歌的无头浏览器,是一款无界面的谷歌浏览器。
如今很多大网站有对selenium采起了监测机制。好比正常状况下咱们用浏览器访问淘宝等网站的 window.navigator.webdriver的值为
undefined。而使用selenium访问则该值为true。那么如何解决这个问题呢?
只须要设置Chromedriver的启动参数便可解决问题。在启动Chromedriver以前,为Chrome开启实验性功能参数excludeSwitches
,它的值为['enable-automation']
,完整代码以下:
做业