Python基础6 爬虫中使用无头浏览器 PhantomJS(python基础词汇)

网友投稿 740 2022-08-26


Python基础6 爬虫中使用无头浏览器 PhantomJS(python基础词汇)

Python基础6 爬虫中使用无头浏览器 Phantomjs

​​一、简介​​

​​1. 内置对象:​​​​2. Python的爬虫方案里,对javascript通常有几种解决方案​​​​3. 几种无界面浏览器说明​​

​​二、安装​​

​​1. windows环境安装​​​​2. ubuntu环境安装方法1​​​​3. ubuntu环境安装方法2​​​​4. CentOS环境安装​​

​​三、示例,启动js脚本​​

​​1. 获取脚本参数​​​​2. 截屏​​​​3. 运行js 计算页面运行时间​​​​4. 取标题​​​​5. 取元素,修改UserAgent​​​​6. 注入js​​

​​四、 Python+Selenium+PhantomJS​​

​​1. 输出title​​​​2. 输出内容到文件​​​​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 '); phantom.exit(1);} else { t = Date.now(); address = system.args[1]; page.open(address, function (status) { if (status !== 'success') { console.log('FAIL to load the address'); } else { t = Date.now() - t; console.log('Page title is ' + page.evaluate(function () { return document.title; })); console.log('Loading time ' + t + ' msec'); } phantom.exit(); });}

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小时内删除侵权内容。

上一篇:Python 五点搞定作用域(python怎么读)
下一篇:Java自定义线程池的实现示例
相关文章

 发表评论

暂时没有评论,来抢沙发吧~