selenium和casperjs2种数据抓取方式(进来的朋友请留言,共同探讨)

原创 2014年04月11日 17:58:46

今天用selenium和casperjs2种对https://class.coursera.org/nlp/lecture网站的ppt、pdf、srt、MP4的下载地址进行数据抓取

1、python+selenium

#!/usr/bin/python
# -*- coding: utf-8 -*-

from selenium import webdriver
from bs4 import BeautifulSoup

import time
import sys
reload(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 z

starttime = 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_source
content = catchDate(html)
endtime = time.time()
print endtime - starttime
driver.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

用MapReduce找共同朋友编程实现(Hadoop)

数据格式如下: 第一个字母代表本人,其他是他的朋友,找出共同朋友的人,和共同朋友是谁?package FindFriend;import java.io.IOException; import ...
  • scgaliguodong123_
  • scgaliguodong123_
  • 2015年05月26日 11:24
  • 1702

微信开发-发送给朋友,分享到朋友圈开发

微信分享功能
  • u013292160
  • u013292160
  • 2016年07月15日 10:34
  • 4126

mapreduce 找共同的朋友

public class FindFriends{ public static class changeMapper extends Mapper{ public void map(Object ke...
  • zhonglongshen
  • zhonglongshen
  • 2015年05月22日 16:23
  • 280

使用Python+selenium+BeautifulSoup抓取动态网页的关键信息

程序目的:根据特定的SNP list, 在千人基因组数据库中爬取CHB人群的等位基因频率信息。 因为网页是动态的数据,嵌入了JavaScript代码,因此借助selenium来爬取信息。 Beau...
  • VincentLuo91
  • VincentLuo91
  • 2016年10月27日 16:39
  • 5469

数据分析之共同好友统计

今天主要分享一个统计共同好友的案例,非常简单也非常实用的一个小案例,对于数据分析初级开发人员是很好的入门资料。 上面这段数据的意思是:A的好友有B,C,D,F,E,O,B的好友有A、C、E、K,其他的...
  • sdksdk0
  • sdksdk0
  • 2016年06月12日 16:46
  • 6158

社交网络中的共同好友计算(一度好友与二度好友)

社交网络中经常存在求共同好友的需求,比如最常见的求一度好友与二度好友,如上图所示。package bit.edu.cn;import java.util.ArrayList; import java....
  • bitcarmanlee
  • bitcarmanlee
  • 2016年05月24日 16:46
  • 3250

Python抓取网页动态数据——selenium webdriver的使用

文章目的 当我们使用Python爬取网页数据时,往往用的是urllib模块,通过调用urllib模块的urlopen(url)方法返回网页对象,并使用read()方法获得url的html内容,然后使用...
  • buptlrw
  • buptlrw
  • 2015年09月30日 16:01
  • 15441

数据提取-Selenium专治各种顽固性客户端

说起Selenium,很多人想到的是Selenium用在自动化web测试上,的确,Selenium是一个很好的自动化测试工具,能够实现很多便利的测试功能。其实Selenium也是一款数据抽取的神器。我...
  • hugolyl
  • hugolyl
  • 2016年04月26日 22:32
  • 1322

20170807学习总结-selenium获取列表内容

case: 取消收藏后,验证取消的记录不在显示在收藏流程中 方法:采用selenium获取一组元素的方法去解决问题 启发:元素的定位可以先定位到大的颗粒度,在向小的颗粒度定位,例如先定位到ta...
  • Foreverlemon
  • Foreverlemon
  • 2017年08月07日 17:36
  • 730

利用selenium+chrome+python爬去加密网站数据

背景: 有一个需求,需要把某个社区网站的房源相关信息爬取下来,但是该社区对提交的表单数据使用js进行了加密,纠结了几天,没能搞明白加密的逻辑,所以想到使用selenium操作chrome来遍历这个社...
  • data_learn
  • data_learn
  • 2017年11月12日 23:23
  • 80
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:selenium和casperjs2种数据抓取方式(进来的朋友请留言,共同探讨)
举报原因:
原因补充:

(最多只允许输入30个字)