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