《数据采集与预处理》课件11:动态网页数据采集-selenium多窗口_第1页
《数据采集与预处理》课件11:动态网页数据采集-selenium多窗口_第2页
《数据采集与预处理》课件11:动态网页数据采集-selenium多窗口_第3页
《数据采集与预处理》课件11:动态网页数据采集-selenium多窗口_第4页
《数据采集与预处理》课件11:动态网页数据采集-selenium多窗口_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

动态网页数据采集–selenium多窗口Selenium查找网页元素的方法?Selenium操纵元素的方法?复习1、理解selenim的3种等待方式,掌握强制等待方式2、学会分析多窗口iframe页面结构3、熟悉selenium的窗口切换代码4、了解无界面浏览器模式的原理及代码教学目标1selenium的窗口切换动态网页数据采集–selenium多窗口selenium的等待方式23Selenium的无界面模式selenium的等待方式现在很多往网站采用Ajax技术动态加载数据,采集数据也只能等待数据加载完成之后。在使用selenium时,一般要等待页面元素加载完成后,才能执行操作,否则会报找不到元素的错误,这样就要在有些场景下加等待时间。常用到的有三种等待方式:强制等待:之前使用过的time.sleep,必须等待足够的时间才进行下一步。隐式等待显示等待selenium的等待方式2、隐式等待

隐式等待,设置一个等待时间,如果在这个等待时间内,网页加载完成,则执行下一步;否则一直等待时间截止,然后再执行下一步。隐式等待是约定最大的等待间隔,使用wd.implicitly_wait(second)来进行控制。这样也就会有个弊端,程序会一直等待整个页面加载完成,直到超时,但有时候需要的那个元素早就加载完成了,只是页面上有个别其他元素加载特别慢,仍要等待页面全部加载完成才能执行下一步。selenium的等待方式如果我想等我要的元素一加载出来就执行下一步,该怎么办?这里就要用到显示等待。3、显示等待显示等待要用到WebDriverWait,需要导包“fromselenium.webdriver.support.waitimportWebDriverWait”,配合该类的until()和until_not()方法,就能够根据判断条件而进行灵活地等待了。WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)参数解释如下:

driver:浏览器驱动;timeout:最长超时时间,默认以秒为单位;

poll_frequency:检测的间隔(步长)时间,默认为0.5S;

ignored_exceptions:超时后的异常信息,默认情况下抛NoSuchElementException异常。WebDriverWait()一般与until()或until_not()方法配合使用:until(method,message=''):调用该方法提供的驱动程序作为一个参数,直到返回值为True;until_not(method,message=''):调用该方法提供的驱动程序作为一个参数,直到返回值为False。selenium的等待方式3、显示等待之前百度检索的案例可以改写为:程序每隔0.2检查一次,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间3s,然后抛出NoSuchElementException。1selenium的窗口切换动态网页数据采集–selenium多窗口selenium的等待方式23Selenium的无界面模式网页中有一种节点叫作iframe,也就是子Frame,相当于页面的子页面,它的结构和外部网页的结构完全一致。Frame框架:页面框架布局中最基本的框架;Iframe框架:又称内嵌框架,其框架的主要标记为Iframe标记(又称为浮动帧标记)。selenium的窗口切换selenium的窗口切换Selenium打开页面后,它默认是在父级Frame里面操作,而此时如果页面中还有子Frame,它是不能获取到子Frame里面的节点的。Selenium提供了对iframe进行操作的方法,常见方法如下:方法描述switch_to.frame()进行frame框架的切换switch_to.parent_frame()切换到父frame框架switch_to.default_content()切换回主文档selenium的窗口切换在网易云音乐页面切换Frame,网页的源代码如下:selenium的窗口切换程序实现流程如下:1.驱动浏览器打开网易云音乐;2.使用switch_to_frame()方法切换到iframe;3.尝试获取父级Frame中的搜索框节点(找不到);4.切换到父级Frmae;5.重新获取搜索框节点,此时获取成功。fromseleniumimportwebdriverfrommon.exceptionsimportNoSuchElementExceptionpath="E:/chromedriver.exe"browser=webdriver.Chrome(executable_path=path)browser.implicitly_wait(10)#设置隐式等待10surl='/'browser.get(url)browser.switch_to.frame('g_iframe')source=browser.find_element_by_id('g_nav')print(source.get_attribute("outerHTML"))try:logo=browser.find_element_by_id('srch')exceptNoSuchElementException:print('NOLOGO')browser.switch_to.default_content()search=browser.find_element_by_id('srch')print(search)print('thetagofnode:',search.tag_name)1selenium的窗口切换动态网页数据采集–selenium多窗口selenium的等待方式23Selenium的无界面模式Selenium的无界面模式缺省情况下使用selenium每次都出现浏览器界面,要等待页面所有元素都加载完成后才能进行后续操作。如果页面中的图片资源较大,加载时间较长,执行效率低下。可通过参数调整启动无界面浏览器模式,即headless模式。参考代码如下。Selenium的无界面模式如果觉得用法比较繁琐,也可以使用以下精简模式,参考代码如下。fromseleniumimportwebdriver

opt=webdriver.ChromeOptions()#创建Chrome参数对象

opt.headless=True#把Chrome设置成无界面模式,windows/Linux皆可

path="D:/安装软件/chromedriver_win32/ChromeDriver.exe"

wd=webdriver.Chrome(options=opt,executable_path=path)#创建Chrome无界面对象

wd.get('')

print(wd.page_source)

wd.close()QQ邮箱案例要求实现收件箱列表的爬取,爬取一页信息即可。爬取信息包括发件人、发件人邮箱、邮件标题、收件日期。存储方式自定,爬取的目标网址为。参考页面如下图6所示。案例精讲-QQ邮箱【任务描述】QQ邮箱收件箱爬虫编写的整体思路为获取收件箱列表信息、收件箱数据解析以及数据存储。获取收件箱列表信息就是使用selenium实现模拟登录、点击收件箱链接、获取收件箱列表的html过程。收件箱数据解析我们selenium的定位方法进行数据解析。数据存储采用任何存储方式都可以。使用selenium实现QQ邮箱的登录是我们需要重点关注的问题。从操作上来看,QQ邮箱登录分为QQ登录和QQ未登录2种状态。QQ登录时,登录QQ邮箱只需要点击QQ登录图标就可实现邮箱登录。如图所示。案例精讲-QQ邮箱【任务分析】QQ未登录时,登录QQ邮箱必须输入QQ邮箱的用户名和密码。如图所示。实现QQ登录必须分别考虑2种情况的处理。登录完成后就简单点击下邮箱列表左侧的收件箱链接即可。整个过程必须在合适环节增加时间等待,如点击登录按钮后、点击收件箱列表后。需要注意的时使用selenium频繁登录QQ邮箱依然会激活滑动验证码,依然通过人为滑动跳过此技术难点。案例精讲-QQ邮箱【任务分析】案例精讲-QQ邮箱【任务实现】1.模拟登录登录相关的页面元素包裹在Frame中必须要实现Frame的切换,否则无法找到指定的用户名和密码输入框,页面结构如图所示。可以初步编写如下代码,实现QQ未登录时的QQ邮箱登录。案例精讲-百度首页登录【任务实现】2.判断登录状态接下来我们考虑QQ已经登录时,登录的处理。页面结构如图所示。通过增加条件判断融合2种情况。通过find_elements_by_id函数判断图标是否存在,如果存在通过driver.find_element_by_id(imags).click()实现元素查找和单击登录操作。参考代码如下所示。案例精讲-百度首页登录【任务实现】2.点击收件箱链接,获得页面数据实现登录过后的收件箱列表点击以及获取收件箱页面html的功能。需要注意的是点击“收件箱链接”后收件箱列表包裹在名为mainFrame的Iframe中,所以使用switch_to.frame进行切换。由于数据解析打算使用selenium的相关方法,所以返回的是selenium对象,也可以使用driver.page_source返回html文本。案例精讲-百度首页登录【任务实现】2.数据解析(这部分可考虑用前面的beautifulsoap

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论