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()

 

posted @ 2019-03-05 20:49  Ethan_Y  阅读(199)  评论(0编辑  收藏  举报