本系列文章是我在阅读《Python3网络爬虫开发实战》等网络资料一书时学习爬虫过程中的一些笔记和心得,希望与大家分享。章节概述:如何使用模拟浏览器操作的库来爬取动态渲染页面的内容。章节结构:SeleniumSplash具体内容:Selenium1.定义:Selenium是一种自动化测试工具,可以驱动浏览器执行特定的动作,获取当前的源代码。2、使用Selenium爬取JS2.1selenium.webdrivercommon,支持、Chrome、FireFox等浏览器库动态渲染的页面,Chrome实例可以打开浏览器,并跳转到指定网页,通过定义input的input和find_element_by_id浏览器实例函数锁定搜索框,输入搜索关键字,还可以获取cookie、url、page_source等信息。具体步骤如下:声明浏览器对象browser=webdriver.Chrome()或browser=webdriver.Firefox()访问页面browser.get("http://www.somewhere.com")c。查找节点browser.find_element_by_name('q')browser.find_element_by_id('q')除了上面两种常见的,还可以通过css选择器,xpath等方式查找这些方法会返回一个WebElement实例或者直接通过find_element方法node=browser.find_element(By.ID,'q')如果想获取多个节点,可以使用find_elements方法d。节点交互允许浏览器模拟一些动作,比如搜索框搜索一个词:input_node.send_keys("Question")e。动作链:一系列没有对应节点的动作actions=ActionChains(browser)actions.drag_and_drop(source,target)f.执行JavaScriptbrowser.execute_script()g。通过get_attributs()、get_text()获取节点信息,或者直接读取node.id、node.localtion、node.tage_name等。h.延迟等待:隐式等待&显式等待隐式等待是在没有找到节点的情况下,如果超过设置的延迟时间,就会报找不到节点。Implicitly_wait(10)显式等待指定节点。如果再次超时,则会抛出超时异常。通过引入WebDriverWait对象并指定时间,调用until通过Enterexpected_conditions,找到则返回节点,找不到则抛出异常。有很多种等待条件i。向前和向后j。Cookies:browser.get_cookies&delete_all_cookies。选项卡管理:browser.window_handles&switch_to_windowl。异常处理:selenium.common.exceptionsm.n.o.p.q.r.s.t.u.v.w.x.y.z.Splash1。定义:Splash是一个JS渲染服务,是一个带有HTTP_API的轻量级浏览器。同时,它连接了Python中的Twisted和QT库。2、功能:可以异步处理多个渲染进程,并获取渲染后的页面源码和截图。也可以关闭图片渲染,使用AdBlock等加速获取文本内容,执行JS脚本等。3.使用方法:Splash提供网页界面显示渲染结果,可以自行百度通过输入框测试。还可以通过SplashLua脚本进行一系列的渲染动作,比如splash提供了go、wait、evaljs等函数4.Splash对象的属性args:获取加载时配置的参数,如URL、GET请求参数,POST请求形式等js_enable:表示是否执行JSresource_timeout:加载超时设置images_enable:是否加载图片plugins_enable:浏览器插件控制,如flash插件scroll_position:控制页面滚动5.Splash对象动作go:跳转到某个页面wait:等待加载时间jsfunc:evaljs:执行js代码,返回最后一项的执行结果runjs:执行js脚本autoload:自动加载对象call_later:延迟调用http_get:HTTPgetrequesthttp_post:HTTPpost请求set_content:设置页面内容html:获取网页源码png:获取png格式的网页截图har:获取页面加载pr的描述ocessurl:获取当前url除以上函数外,还有get_cookie、add_cookie、clear_cookie、get_viewport_size、select_all、mouse_click、jpeg等方法6.Splash负载均衡因为有时候爬取任务比较多,可以设置多个Splash服务,配合Nginx,以轮询的方式实现负载均衡,联合爬取数据。
