python + selenium + PhantomJS 获取腾讯应用宝APP评论
2016-03-29 14:16
543 查看
PhantomJS
PhantomJS 是一个基于WebKit的服务器端JavaScript API,它无需浏览器的支持即可实现对Web的支持,且原生支持各种Web标准,如DOM 处理、JavaScript、CSS选择器、JSON、Canvas和可缩放矢量图形SVG。PhantomJS主要是通过JavaScript和 CoffeeScript控制WebKit的CSS选择器、可缩放矢量图形SVG和HTTP网络等各个模块。PhantomJS主要支持Windows、 Mac OS、Linux三个平台,并且提供了对应的二进制安装包。PhantomJS 的使用场景如下:
无需浏览器的Web测试:无需浏览器的情况下进行快速的Web测试,且支持很多测试框架,如YUI Test、Jasmine、WebDriver、Capybara、QUnit、Mocha等。
页面自动化操作:使用标准的DOM API或一些JavaScript框架(如jQuery)访问和操作Web页面。
屏幕捕获:以编程方式抓起CSS、SVG和Canvas等页面内容,即可实现网络爬虫应用。构建服务端Web图形应用,如截图服务、矢量光栅图应用。
网络监控:自动进行网络性能监控、跟踪页面加载情况以及将相关监控的信息以标准的HAR格式导出。
PhantomJS 已形成了一个功能非常强大的生态圈内容,相关项目如下:
CasperJS:一个开源的导航脚本处理和高级测试工具
Poltergeist :测试工具Capybara的测试驱动
Guard::Jasmine:能够基于Rails实现自动化测试Jasmine的Specs
GhostDriver:远程 WebDriver 有线协议的开源实现
PhantomRobot:PhantomJS机器人测试框架
Mocha-PhantomJS:JavaScript测试框架Mocha的客户端
此 外,生态圈还包括基于PhantomJS实现了众多截屏工具,如capturejs、pageres、phantomjs-screenshots、 manet、screenshot-app等;以及Node.js、Django、PHP、Sinatra等语言的截图API和Confess、 GhostStory、Grover等众多工具。
下载地址:
http://phantomjs.org/download.html代码样例:
#/usr/bin/env python # -*- coding: utf-8 -*- from selenium import webdriver import time import xlsxwriter import json def main(url): driver = webdriver.PhantomJS() driver.get(url) time.sleep(5) with open("./tencent_yyb.json", "wb") as write_obj: try: # numstr = driver.find_elements_by_xpath('//*[@id="J_CommentCount"]')[0].text # num = int(numstr[1:4]) flag = True while flag: # 循环,无法点击“查看更多评论”报错,重置标志位flag完成获取所有内容 try: driver.find_element_by_id("J_DetCommentShowMoreBtn").click() # 点击“查看更多评论” #driver.implicitly_wait(10) time.sleep(1) except Exception as err: print err flag = False data = driver.find_elements_by_xpath('//*[@id="J_DetDataContainer"]/div/div[8]/ul/li') repeat = {} # 缓存数据 for item in data: val_list = item.text.split('\n') if len(val_list) == 3: ptime = val_list[1].encode("utf-8") pcontent = val_list[2].encode("utf-8") if ptime not in repeat.keys(): # 去重 repeat[ptime] = pcontent write_obj.write("{\"发布时间\":\"" + ptime + "\", \"发布内容\":\"" + pcontent + "\"}\n" ) else: ptime = val_list[1].encode("utf-8") pcontent = ' ' if ptime not in repeat.keys(): repeat[ptime] = pcontent write_obj.write("{\"发布时间\":\"" + ptime + "\", \"发布内容\":\"" + pcontent + "\"}\n" ) except Exception as err: print err finally: driver.quit() def get_num(name): jfilename = "./" + name + ".json" count = len(open(jfilename, "rU").readlines()) - 1 return count # xls转换写入 def w_xls(url, name): perfix = time.strftime('%Y%m%d') xfilename = "./" + name + '_' + perfix + ".xlsx" jfilename = "./" + name + ".json" workbook = xlsxwriter.Workbook(xfilename) worksheet1 = workbook.add_worksheet() lines = int(get_num(name)) worksheet1.set_column = ('A:C', lines+1) worksheet1.write('A1', 'URL') worksheet1.write('B1', u'发布时间') worksheet1.write('C1', u'发布内容') row = 1 with open(jfilename, "r") as obj_read: for line in obj_read.readlines(): data = json.loads(line) worksheet1.write(row, 0, url) worksheet1.write(row, 1, data[u'发布时间']) worksheet1.write(row, 2, data[u'发布内容']) row += 1 if __name__ == '__main__': url = '' main(url) time.sleep(3) w_xls(url, "tencent_yyb")
View Code
相关文章推荐
- android的学习资源集合
- 七款Debug工具推荐:iOS开发必备的调试利器
- android radiogroup 中 某个radiobutton设置不可更改设置 但是点击会有提示 的 方法
- ios学习--属性字符串NSAttributeString与NSString相互转换包含图片和emoji图
- 《精通iOS开发·第六版》数据持久化基础知识之SOLite3持久化
- Android 打开和隐藏软键盘
- iOS开发66-setValue:forKey:和 setObject:forKey:的区别
- 《精通iOS开发·第六版》数据持久化基础知识之CoreData持久化
- Android Service学习总结(上)
- swift开发笔记25 定时的本地通知
- 微信公众号开发--获取网页授权并自定义菜单点击获得openid跳转
- 关于自定义开关按钮的问题
- Android获取App版本号和版本名
- Caused by: android.os.NetworkOnMainThreadException错误解决办法
- 点击改变背景颜色
- getAppName()
- Android 深入理解Android中的自定义属性
- 《精通iOS开发·第六版》数据持久化基础知识之属性列表持久化
- iOS开发遇到的问题
- Android性能测试工具列表