java中的接口是类吗
740
2022-08-26
Python基础6 爬虫中使用无头浏览器 PhantomJS(python基础词汇)
Python基础6 爬虫中使用无头浏览器 Phantomjs
一、简介
1. 内置对象:2. Python的爬虫方案里,对javascript通常有几种解决方案3. 几种无界面浏览器说明
二、安装
1. windows环境安装2. ubuntu环境安装方法13. ubuntu环境安装方法24. CentOS环境安装
三、示例,启动js脚本
1. 获取脚本参数2. 截屏3. 运行js 计算页面运行时间4. 取标题5. 取元素,修改UserAgent6. 注入js
四、 Python+Selenium+PhantomJS
1. 输出title2. 输出内容到文件3. 截屏4. 选择器5. 截全屏
一、简介
一个基于webkit内核的无头浏览器。本章主要是使用PhantomJS对网页中的JS进行处理。
1. 内置对象:
var system=require('system'); //获得系统操作对象,包括命令行参数、phantomjs系统设置等信息var page = require('webpage'); //获取操作dom或web网页的对象,通过它可以打开网页、接收网页内容、request、response参数,其为最核心对象。var fs = require('fs'); //获取文件系统对象,通过它可以操作操作系统的文件操作,包括read、write、move、copy、delete等。
2. Python的爬虫方案里,对javascript通常有几种解决方案
写代码模拟js逻辑调用一个有界面浏览器,如selenium使用一个无界面浏览器,如casperjs,phantomjs自己基于js引擎实现轻量级浏览器。pyv8的示例里有一个基于v8实现的简易浏览器模型。
3. 几种无界面浏览器说明
casperjs,phantomjs:非python,可以通过命令行调用。phantomjs还有一个非官方的webdriver协议实现,可通过selenium调phantomjs实现无界面。ghost,spynner等,py定制的webkit。
二、安装
1. windows环境安装
下载地址: ubuntu环境安装方法1
注意不要使用 sudo apt-get install phantomjs 下载地址:apt-get install nodejs-legacysudo apt-get install npmsudo apt purge phantomjsnpm install -g --registry phantomjs
3. ubuntu环境安装方法2
tar -xvf phantomjs-2.1.1-linux-x86_64.tar.bz2–将程序移到一个合适的位置sudo mv phantomjs-2.1.1-linux-x86_64 /usr/local/src/phantomjs—-创建软链接到环境变量中。这样可以直接在shell中使用phantomjs命令sudo ln -sf /usr/local/src/phantomjs/bin/phantomjs /usr/local/bin/phantomjs—-检查是否正常工作phantomjs
4. CentOS环境安装
下载
wget -xjvf phantomjs-2.1.1-linux-x86_64.tar.bz2chmod +x /PATH/phantomjs-2.1.1/bin/phantomjssudo ln -s ~/PATH/phantomjs-2.1.1/bin/phantomjs /usr/local/bin/phantomjsyum install fontconfig freetype2phantomjs -v
三、示例,启动js脚本
把代码保存成.js文件,然后使用下面命令运行:
phantomjs.exe 1.js
1. 获取脚本参数
var system = require('system');if (system.args.length === 1) { console.log('Try to pass some args when invoking this script!');} else { system.args.forEach(function (arg, i) { console.log(i + ': ' + arg); });}phantom.exit();
2. 截屏
var page = require('webpage').create();page.open('function () { page.render('example.png'); phantom.exit();});
3. 运行js 计算页面运行时间
var page = require('webpage').create(), system = require('system'), t, address;phantom.outputEncoding="gbk"; //按实际编码格式填写if (system.args.length === 1) { console.log('Usage: loadspeed.js
4. 取标题
var page = require('webpage').create();page.open('function(status) { var title = page.evaluate(function() { return document.title; }); phantom.outputEncoding = "gbk"; console.log('Page title is ' + title); phantom.exit();});
5. 取元素,修改UserAgent
var page = require('webpage').create();console.log('The default user agent is ' + page.settings.userAgent);page.settings.userAgent = 'SpecialAgent';page.open('function (status) { if (status !== 'success') { console.log('Unable to access network'); } else { var ua = page.evaluate(function () { return document.getElementById('myagent').innerText; }); console.log(ua); } phantom.exit();});
6. 注入js
var page = require('webpage').create();page.open('function() { page.includeJs("function() { page.evaluate(function() { $("button").click(); }); phantom.exit() });});
四、 Python+Selenium+PhantomJS
下面Python与PhantomJS结合使用。
1. 输出title
#!/usr/bin/pythonfrom selenium import webdriverdriver = webdriver.PhantomJS(executable_path="phantomjs.exe")driver.get("= driver.titleprint (data)
2. 输出内容到文件
#!/usr/bin/pythonfrom selenium import webdriverdriver = webdriver.PhantomJS(executable_path="phantomjs.exe")driver.get("(driver.page_source)fo = open("aaaa1.txt", "wb")fo.write(driver.page_source.encode())fo.close()driver.quit()
3. 截屏
#!/usr/bin/python#coding=utf-8from selenium import webdriver driver=webdriver.PhantomJS(executable_path="phantomjs.exe") driver.get(" data = driver.titledriver.save_screenshot('c***.png')print(data)
4. 选择器
#!/usr/bin/python#coding=utf-8from selenium import webdriverdriver = webdriver.PhantomJS(executable_path='phantomjs.exe')#executable_path为你的phantomjs可执行文件路径driver.get("= driver.execute_script("return newsJason")print (r)#selenium在webdriver的DOM中使用选择器来查找元素,包含id,class_name,css_selector,link_text,name,tag_name,tag_name,xpath等等print (driver.find_element_by_tag_name("div").text)print (driver.find_element_by_css_selector("#content").text)print (driver.find_element_by_id("content").text)
5. 截全屏
#!/usr/bin/python#coding=utf-8import timefrom selenium import webdriverfrom selenium.webdriver.common.desired_capabilities import DesiredCapabilitiesdef cpature(url): dcap = dict(DesiredCapabilities.PHANTOMJS) dcap["phantomjs.page.settings.userAgent"] = ( "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36" ) driver = webdriver.PhantomJS(desired_capabilities=dcap) driver.get(url) js="document.body.scrollTop+=100" height = driver.execute_script("return document.body.scrollHeight"); count = int(height / 100) print('the height is %d,滚动 %d 次' % (height, count)) print('result url is: %s' % driver.current_url) for i in range(0, count): print('scroll index: %d' % i) driver.implicitly_wait(30) time.sleep(1) driver.execute_script(js) html=driver.page_source driver.save_screenshot('1.png') driver.quit() return htmlurl="http://sohu.com.cn/"text=cpature(url)
发现的问题:网页会遗失一些图片不显示,可能图片是异步加载的;在CentOS下运行时,缺失更严重。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~