06 PhantomJS浏览器
PhantomtomJS
PhantomJS是一款无界面浏览器,其自动化操作流程和谷歌浏览器是一致的。由于是无界面的,为了能够展示自动化操作流程,PhantomJS为用户提供了一个截屏的功能,使用save_screenshot函数实现。
selenium+phantomjs 是爬虫终极解决方案。有些网站上的内容信息是通过动态加载js形成的,所以使用普通爬虫程序无法回去动态加载的js内容。例如豆瓣电影中的电影信息是通过下拉操作动态加载更多的电影信息。
下载
下载地址:http://phantomjs.org/download.html
基本使用
from selenium import webdriver from selenium.webdriver.common.keys import Keys import time # phantomjs路径 path = r'E:\phantomjs-2.1.1-windows\bin\phantomjs' driver = webdriver.PhantomJS(path) # 打开百度 driver.get('http://www.baidu.com/') time.sleep(3) # 截图 driver.save_screenshot(r'baidu.png') # 查找input输入框 search = driver.find_element_by_id('kw') # 往框里面写文字 search.send_keys('美女') search.send_keys(Keys.ENTER) time.sleep(2) # 截图 driver.save_screenshot(r'whow.png') time.sleep(3) # 关闭浏览器 driver.close()
综合操作
需求:尽可能多的爬取豆瓣网中的电影信息。
from selenium import webdriver import time url = 'https://movie.douban.com/typerank?type_name=%E6%81%90%E6%80%96&type=20&interval_id=100:90&action=' path = r'E:\phantomjs-2.1.1-windows\bin\phantomjs' # 创建无界面浏览器对象 driver = webdriver.PhantomJS(path) # 发送url请求 driver.get(url) time.sleep(2) # 截图 driver.save_screenshot(r'1.png') # 执行js代码(让滚动条向下偏移n个像素(作用:动态加载了更多的电影信息)) js = 'window.scrollTo(0, document.body.scrollHeight)' driver.execute_script(js) # 该函数可以执行一组字符串形式的js代码 time.sleep(2) driver.execute_script(js) # 该函数可以执行一组字符串形式的js代码 time.sleep(2) # 截图 driver.save_screenshot('2.png') # 获取页面html源码 html_source = driver.page_source # 该属性可以获取当前浏览器的当前页的源码(html) # 将页面HTML源码写入文件 with open('source.html', 'w', encoding='utf-8') as f: f.write(html_source) # 关闭浏览器 driver.close()