亲测超级好用WebCollector抓取新浪微博数据(提供下载所有爬虫包)

抓下来返回text是这样的:

需要用到的包:下载地址:http://pan.baidu.com/s/1o69myOq

两个类的代码

WeiboCN.java

import java.util.Set;
import cn.edu.hfut.dmic.webcollector.*;
import org.openqa.selenium.Cookie;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;

public class WeiboCN {
    /**
     * 代码由WebCollector提供,如果不在WebCollector中使用,需要导入selenium相关jar包
     */

        /**
         * 获取新浪微博的cookie,这个方法针对weibo.cn有效,对weibo.com无效
         * weibo.cn以明文形式传输数据,请使用小号
         * @param username 新浪微博用户名
         * @param password 新浪微博密码
         * @return
         * @throws Exception
         */
        public static String getSinaCookie(String username, String password) throws Exception{
            StringBuilder sb = new StringBuilder();
            HtmlUnitDriver driver = new HtmlUnitDriver();
            driver.setJavascriptEnabled(true);
            driver.get("http://login.weibo.cn/login/");

            WebElement mobile = driver.findElementByCssSelector("input[name=mobile]");
            mobile.sendKeys(username);
            WebElement pass = driver.findElementByCssSelector("input[name^=password]");
            pass.sendKeys(password);
            WebElement rem = driver.findElementByCssSelector("input[name=remember]");
            rem.click();
            WebElement submit = driver.findElementByCssSelector("input[name=submit]");
            submit.click();

            Set<Cookie> cookieSet = driver.manage().getCookies();
            driver.close();
            for (Cookie cookie : cookieSet) {
                sb.append(cookie.getName()+"="+cookie.getValue()+";");
            }
            String result=sb.toString();
            if(result.contains("gsid_CTandWM")){
                return result;
            }else{
                throw new Exception("weibo login failed");
            }
        }
}

WeiboCrlawer.java

import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import cn.edu.hfut.dmic.webcollector.crawler.DeepCrawler;
import cn.edu.hfut.dmic.webcollector.model.Links;
import cn.edu.hfut.dmic.webcollector.model.Page;
import cn.edu.hfut.dmic.webcollector.net.HttpRequesterImpl;
public class WeiboCrawler extends DeepCrawler{
    public WeiboCrawler(String crawlPath) throws Exception {
        super(crawlPath);
        /*获取新浪微博的cookie,账号密码以明文形式传输,请使用小号*/
        String cookie=WeiboCN.getSinaCookie("你的微博账号", "密码");
        HttpRequesterImpl myRequester=(HttpRequesterImpl) this.getHttpRequester();
        myRequester.setCookie(cookie);
    }  

    public Links visitAndGetNextLinks(Page page) {
        /*抽取微博*/
        Elements weibos=page.getDoc().select("div.c");
        for(Element weibo:weibos){
            System.out.println(weibo.text());
        }
        /*如果要爬取评论,这里可以抽取评论页面的URL,返回*/
        return null;
    }  

    public static void main(String[] args) throws Exception{
        WeiboCrawler crawler=new WeiboCrawler("/home/hu/data/weibo");
        crawler.setThreads(3);
        /*对某人微博前5页进行爬取*/
        for(int i=0;i<5;i++){
            crawler.addSeed("http://weibo.cn/vipgcu?vt=4&page="+i);
        }
        crawler.start(1);
    }
}

本文作者:By: 罗坚元 :http://blog.csdn.net/sunyuan_software

时间: 2024-12-24 13:01:30

亲测超级好用WebCollector抓取新浪微博数据(提供下载所有爬虫包)的相关文章

抓取新浪微博数据存入MongoDB,避免重复插入微博数据的方法

def getMyDatalist(): #id这个key key = str(u'id').decode('utf-8') #存储旧数据的id列表 old_ids = [] #存储新微博的列表 extr_wb = [] #从MongoDB上获取的数据 old_datalist = weibodata.find() for old in old_datalist: old_ids.append(old[key]) #从微博上抓取新数据 data = client.statuses.home_ti

用WebCollector爬取新浪微博数据

用WebCollector可以轻松爬取新浪微博的数据. 首先需要一个能查看cookie的浏览器插件,推荐使用 firefox浏览器+firebug(插件). 具体步骤: 1.用浏览器打开 http://weibo.cn/pub/   这是新浪微博面对手机用户的一个入口.建议不要使用自己的账号来做爬虫.之所以选择weibo.cn来爬去,是因为这个手机版的限制较少,但是weibo.cn的账号密码都是以明文传输,所以为了防止盗号,建议新申请账号进行爬取. 2.登陆进去后,进入个人微博界面(不是http

测试开发Python培训:抓取新浪微博抓取数据-技术篇

测试开发Python培训:抓取新浪微博抓取数据-技术篇 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.在poptest的selenium的课程中,我们在培训的课程里讲python的语言,也是通过项目实战的方式进行讲解,前期分享了个新浪微博的登陆功能,这次在通过抓取新浪微博数据进一步讲解脚本.(大家对课程感兴趣,请加qq:564202718) 微博有发布微博功能,微博发布后需要验证内容,那么如何验证微博发布数据的正确性,首先要

Java语言实现通过Ajax抓取后台数据及图片

1.Java语言实现通过Ajax抓取后台数据及图片信息 1.1数据库设计 create table picture( pic_id number not null, pic_name varchar(200)not null, pic_url varchar2(200) not null, pic_descp varchar2(200) not null, pic_price varchar2(200) not null ) insert into picture values(1 ,'小米5s

Asp.net 使用正则和网络编程抓取网页数据(有用)

Asp.net 使用正则和网络编程抓取网页数据(有用) /// <summary> /// 抓取网页对应内容 /// </summary> /// <param name="strUrl">採集地址</param> /// <param name="Begin">開始字符</param> /// <param name="End">结束字符</param&g

java抓取网页数据,登录之后抓取数据。

最近做了一个从网络上抓取数据的一个小程序.主要关于信贷方面,收集的一些黑名单网站,从该网站上抓取到自己系统中. 也找了一些资料,觉得没有一个很好的,全面的例子.因此在这里做个笔记提醒自己. 首先需要一个jsoup的jar包,我用的1.6.0..下载地址为:http://pan.baidu.com/s/1mgqOuHa 1,获取网页内容(核心代码,技术有限没封装). 2,登录之后抓取网页数据(如何在请求中携带cookie). 3,获取网站的ajax请求方法(返回json). 以上这三点我就用一个类

Asp.net 使用正则和网络编程抓取网页数据(实用)

Asp.net 使用正则和网络编程抓取网页数据(实用) /// <summary> /// 抓取网页相应内容 /// </summary> /// <param name="strUrl">采集地址</param> /// <param name="Begin">开始字符</param> /// <param name="End">结束字符</param&g

wireshark抓取OpenFlow数据包

在写SDN控制器应用或者改写控制器源码的时候,经常需要抓包,验证网络功能,以及流表的执行结果等等,wireshark是个很好的抓包分析包的网络工具,下面简介如何用wireshark软件抓取OpenFlow数据包 一. wireshark2.0.0 wireshark2.0.0直接内置了OpenFlow协议,只需要安装wireshark2.0.0即可. 在安装wireshark之前需要安装一些依赖包: sudo apt-get install bison flex libpcap-dev gcc

【iOS】正则表达式抓取网页数据制作小词典

应用程序不一定要自己去提供数据,有现成的数据学会去用才好. 网络很大,各种搜索引擎每天到处爬.本文通过正则表达式抓取网站的数据来做一个小词典. 一.正则表达式的使用 1. 确定匹配方案,即pattern 2. 用pattern实例化NSRegularExpression 3. 用匹配方法开始匹配. 匹配一次:可以使用firstMatch方法 匹配多次:可以用matchs方法 正则表达式对照表:(在网上找到了一个很不错的表,正则表达式各个语言通用) http://www.jb51.net/shou