• PhantomJS 一款无界面的浏览器


    PhantomJS  是一款无界面的浏览器,其自动化操作流程和上述操作谷歌浏览器是一致的。由于是无界面的,为了能够展示自动化操作流程,PhantomJS为用户提供了一个截屏的功能,使用save_screenshot函数实现。

    PhantomJS  驱动程序下载 链接: https://pan.baidu.com/s/13b_cjOTRGEzF8E7bJJz68A 提取码: ujgj 复制这段内容后打开百度网盘手机App,操作更方便哦

    实现代码如下:

     1 from selenium import webdriver
     2 from time import sleep
     3 
     4 # 创建一个浏览器对象,将驱动程序加载到浏览器中
     5 pjs_obj = webdriver.PhantomJS(executable_path=r'C:Users13584Desktop驱动程序phantomjs-2.1.1-windowsinphantomjs.exe')
     6 # 浏览器对象执行get方法相当于手动打开对应的url网址
     7 pjs_obj.get('https://www.baidu.com')
     8 sleep(2)
     9 # 使用开发者工具定位到要输入的文本框,拿到该标签的属性
    10 input_text = pjs_obj.find_element_by_id('kw')
    11 # 在文本框中录入关键字相当于手动输入关键字
    12 input_text.send_keys('python')
    13 sleep(2)
    14 # 使用开发者工具定位到要输入的文本框,拿到该标签的属性
    15 btn = pjs_obj.find_element_by_id('su')
    16 # 相当于手动点击按钮
    17 btn.click()
    18 sleep(2)
    19 # 这里可以进行别的代码,比如获取最终页面的源码数据
    20 pjs_obj.quit()

    重点:selenium+phantomjs 就是爬虫终极解决方案:有些网站上的内容信息是通过动态加载js形成的,所以使用普通爬虫程序无法回去动态加载的js内容。例如豆瓣电影中的电影信息是通过下拉操作动态加载更多的电影信息。

    综合操作:需求是尽可能多的爬取豆瓣网中的电影信息

     1 from selenium import webdriver
     2 from time import sleep
     3 
     4 url = 'https://movie.douban.com/typerank?type_name=%E6%81%90%E6%80%96&type=20&interval_id=100:90&action='
     5 # 发起请求前,可以让url表示的页面动态加载出更多的数据
     6 path = r'C:UsersAdministratorziliaophantomjs-2.1.1-windowsinphantomjs.exe'
     7 # 创建无界面的浏览器对象
     8 bro = webdriver.PhantomJS(path)
     9 # 发起url请求
    10 bro.get(url)
    11 sleep(3)
    12 # 截图
    13 bro.save_screenshot('1.png')
    14 
    15 # 执行js代码(让滚动条向下偏移n个像素(作用:动态加载了更多的电影信息))
    16 js = 'window.scrollTo(0,document.body.scrollHeight)'
    17 bro.execute_script(js)  # 该函数可以执行一组字符串形式的js代码
    18 sleep(2)
    19 
    20 bro.execute_script(js)  # 该函数可以执行一组字符串形式的js代码
    21 sleep(2)
    22 bro.save_screenshot('2.png')
    23 sleep(2)
    24 # 使用爬虫程序爬去当前url中的内容 
    25 html_source = bro.page_source  # 该属性可以获取当前浏览器的当前页的源码(html) 
    26 with open('./source.html', 'w', encoding='utf-8') as fp:
    27     fp.write(html_source)
    28 bro.quit()
    xiaopapa
  • 相关阅读:
    11.22
    11.19
    ConcurrentHashMap中sizeCtl的说明
    Spring源码解析(七) -- Spring事务-初始化篇
    Spring源码解析(六) -- AOP
    Spring源码解析(五) -- 解决循环依赖
    Spring源码解析(四) -- getBean(String name, Class<T> requiredType)
    Spring源码解析(三) -- registerBeanPostProcessors(beanFactory)
    Spring源码解析(二) -- invokeBeanFactoryPostProcessors
    Spring源码解析(一) -- beanfactory
  • 原文地址:https://www.cnblogs.com/wj12312/p/10109019.html
Copyright © 2020-2023  润新知