• phantomjs的和谷歌浏览器的简单使用


    一.phantomjs的简单使用

    '''
        什么是phantomJs:无界面的浏览器
    '''
    from selenium import webdriver
    from time import sleep
    bro = webdriver.PhantomJS(executable_path='./phantomjs-2.1.1-windows/bin/phantomjs.exe')
    sleep(2)
    bro.get(url='https://www.baidu.com/')
    sleep(3)
    text_input = bro.find_element_by_id('kw')
    text_input.send_keys('周杰伦')
    sleep(2)
    btn = bro.find_element_by_id('su')
    btn.click()
    sleep(3)
    
    #浏览器执行js代码
    js = 'window.scrollTo(0,document.body.scrollHeight)'
    bro.execute_script(js)
    sleep(3)
    #截屏
    bro.save_screenshot('./ppppppp.png')
    #获取当前浏览器显示的页面数据
    page_text = bro.page_source #页面数据也包含动态加载出来的数据
    print(page_text)
    
    bro.quit()

     二.谷歌无头浏览器的简单使用

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    import time
    #指定url
    url='https://movie.douban.com/typerank?type_name=%E6%83%8A%E6%82%9A&type=19&interval_id=100:90&action='
    #创建一个参数对象,用来控制chrome以无界面打开
    chrome_options=Options()
    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--disable-gpu')
    #驱动路径
    path='./chromedriver.exe'
    #创建浏览器对象
    bro=webdriver.Chrome(executable_path=path,chrome_options=chrome_options)
    
    #获取数据
    bro.get('http://www.baidu.com/')
    time.sleep(2)
    
    bro.save_screenshot('./baidu.png')
    bro.quit()

    三.通过selenium和phtantosJs配合抓取到更多数据(ajax)

      selenium+phantomjs 就是爬虫终极解决方案:有些网站上的内容信息是通过动态加载js形成的,所以使用普通爬虫程序无法回去动态加载的js内容。

    例如豆瓣电影中的电影信息是通过下拉操作动态加载更多的电影信息。
    综合操作:需求是尽可能多的爬取豆瓣网中的电影信息

    from selenium import webdriver
    from time import sleep
    import time
    
    if __name__ == '__main__':
        url = 'https://movie.douban.com/typerank?type_name=%E6%81%90%E6%80%96&type=20&interval_id=100:90&action='
        # 发起请求前,可以让url表示的页面动态加载出更多的数据
        path = r'C:UsersAdministratorDesktop爬虫授课day05ziliaophantomjs-2.1.1-windowsinphantomjs.exe'
        # 创建无界面的浏览器对象
        bro = webdriver.PhantomJS(path)
        # 发起url请求
        bro.get(url)
        time.sleep(3)
        # 截图
        bro.save_screenshot('1.png')
    
        # 执行js代码(让滚动条向下偏移n个像素(作用:动态加载了更多的电影信息))
        js = 'window.scrollTo(0,document.body.scrollHeight)'
        bro.execute_script(js)  # 该函数可以执行一组字符串形式的js代码
        time.sleep(2)
    
        bro.execute_script(js)  # 该函数可以执行一组字符串形式的js代码
        time.sleep(2)
        bro.save_screenshot('2.png') 
        time.sleep(2) 
        # 使用爬虫程序爬去当前url中的内容 
        html_source = bro.page_source # 该属性可以获取当前浏览器的当前页的源码(html) 
        with open('./source.html', 'w', encoding='utf-8') as fp: 
            fp.write(html_source) 
        bro.quit()
  • 相关阅读:
    设计模式|单例模式
    浅谈质量保障手段之巡检技术
    接口间参数传递的一种解决方案
    设计模式|开闭原则
    经验|项目测试中常见问题以及应对策略
    30个在线Python自学网站,再也不用到处找资料了
    解读数仓常用模糊查询的优化方法
    如何使用ModelBox快速提升AI应用性能?
    【Unity 框架】QFramework v1.0 使用指南 架构篇:04. 引入 Event | Unity 游戏框架 | Unity 游戏开发 | Unity 独立游戏
    【Unity 框架】QFramework v1.0 使用指南 架构篇:01. QFramework 架构简介 | Unity 游戏框架 | Unity 游戏开发 | Unity 独立游戏
  • 原文地址:https://www.cnblogs.com/tjp40922/p/10446765.html
Copyright © 2020-2023  润新知