selenium和casperjs2种数据抓取方式(进来的朋友请留言,共同探讨)
来源:互联网 发布:加拿大炮王吴亦凡 知乎 编辑:程序博客网 时间:2024/04/30 16:00
今天用selenium和casperjs2种对https://class.coursera.org/nlp/lecture网站的ppt、pdf、srt、MP4的下载地址进行数据抓取
1、python+selenium
#!/usr/bin/python# -*- coding: utf-8 -*-from selenium import webdriverfrom bs4 import BeautifulSoupimport timeimport sysreload(sys)sys.setdefaultencoding('utf-8')def catchDate(s): """页面数据提取""" soup = BeautifulSoup(s) z = [] m = soup.findAll("ul",class_="course-item-list-section-list") for obj in m: try: print obj.previous_sibling.find('h3').get_text() tmp = obj.findAll('li', class_="unviewed") for eachli in tmp: titleli = eachli.find('a').get_text() print ' '+titleli allaInEachDiv = eachli.find('div', class_="course-lecture-item-resource").findAll('a') for eacha in allaInEachDiv: print ' '+eacha['href'] except Exception, e: continue if(tmp != ""): z.append(tmp) return zstarttime = time.time()driver = webdriver.PhantomJS(executable_path='C:\phantomjs-1.9.7-windows\phantomjs.exe')driver.get("https://class.coursera.org/nlp/lecture")html = driver.page_sourcecontent = catchDate(html)endtime = time.time()print endtime - starttimedriver.quit
2、casperjs
var casper = require("casper").create({clientScripts: ["jquery-1.7.js"], stepTimeout: 120 * 1000, pageSettings: { loadImages: false }, verbose: true, logLevel: "error" }); var numberOfLinks = 0;var fs = require('fs');var filename = 'content.txt';var fullContent = "";var startTime = new Date(), endTime; casper.start("https://class.coursera.org/nlp/lecture", function() { numberOfLinks = this.evaluate(function() { return __utils__.findAll('.course-item-list-section-list').length; }); this.echo(numberOfLinks + " items found");});getStartTime = function(){this.echo(startTime);this.then(getcontent);};getcontent = function() { fullContent = this.evaluate(function() { var content = ""; jQuery('.course-item-list-section-list').each(function() {var btitle = $(this).prev().find("h3").text();content += btitle + '\r\n';$(this).find("li").each(function(){var stitle = $(this).find("a").first().text();content += stitle + '\r';$(this).find("div a").each(function(){content += $(this).attr("href")+'\r';});content += '\r\n';});content += '\r\n\r\n'; }); return content; });this.then(writefile);};writefile = function() { this.echo('writing to ' + filename); fs.write(filename, fullContent, 'w');this.then(getEndTime);};getEndTime = function(){endTime = new Date();}casper.then(getStartTime);casper.then(function exitSystem() {this.echo(new Date() - startTime); casper.exit(); }); casper.run();
因为不熟练,感觉写的不太好,求大神对方法进行指导!!!
参考:
https://gist.github.com/imjared/5201405
http://casperjs.readthedocs.org/en/latest/modules/casper.html#evaluate
http://blog.csdn.net/u012577500/article/details/18185399
http://stackoverflow.com/questions/14894311/casperjs-windows-installation-how-is-it-done-the-correct-way-please
http://blog.csdn.net/sagomilk/article/details/20800543
0 0
- selenium和casperjs2种数据抓取方式(进来的朋友请留言,共同探讨)
- 给我留言讨论问题的朋友请注意了!
- 共同学习的朋友
- CListCtrl插入数据时滑动条的问题,请用过的朋友进来看看!
- 装修的朋友进来瞧瞧!!!
- 关于肥胖原因的世界性发现~~!!原创,共同探讨,请留下您的意见
- mapreduce 找共同的朋友
- 需要Gmail的请留言!
- 共同朋友
- 访问我的朋友进来看看!
- 路过的朋友没事进来看看谢谢
- 进来的朋友乐一个 嘿嘿
- 学习JAVA的朋友进来帮忙
- 本人博客已经全部搬家到个人站点blog.jetmuffin.com,请有需要的朋友到该站点留言
- 看到的面试题,请容我一道一道的解析(假以时日),希望大家留言一起探讨~
- spark找共同朋友的问题
- 自己写的一种仿qq留言,评论的简单实现方式。请多指教
- 常见的两种数据校验方式
- Android Intent 用法全面总结
- 区分Activity的四种加载模式
- OSRM及OSRM-WEB的编译搭建
- php常用正则表达式
- js字符串处理
- selenium和casperjs2种数据抓取方式(进来的朋友请留言,共同探讨)
- iOS (objective-c) 中的多线程互斥同步问题
- vevew
- 详细介绍JSP技术的两种架构模型
- JSp+ajax用户登录验证
- CMake的介绍与使用
- 图解为什么形参的变化不会改变实参的值?
- 用户级程序主动发起的信息交互:
- Tomcat 8(七)解读Bootstrap