河北科技大学
课程设计报告
学生姓名:
学 号:
专业班级:
课程名称:新浪微博用户粉丝和关注用户抓取
学年学期: 2012 —2013 学年第 二 学期
指导教师:
2 0 13 年 6 月
学生姓名
专业班级
课程设计成绩评定表
学 号
成绩
起止时间
2013.6.10-2013.6.20
设计题目
新浪微博用户粉丝和关注用户抓取
指
导
教
师
评
语
指导教师:
年 月 日
目
录
一、 设计题目................................................................................................................................... 1
二、 本组成员及任务分工.................................................................................................................................1
三、 设计目的................................................................................................................................... 1
四、 设计原理及方案....................................................................................................................... 1
1 使用的软件工具和环境........................................................................................................... 1
2 需求分析与概要设计............................................................................................................... 1
3 详细设计和关键问题............................................................................................................... 2
五、 实现效果..................................................................................................................................... 4
六、 关键源代码..................................................................................................................................5
七、 设计体会..................................................................................................................................... 8
参 考 文 献........................................................................................................................................... 8
一、设计题目
新浪微博用户粉丝和关注用户抓取
二、本组成员及任务分工
三、设计目的
进一步巩固 Java 基础理论和知识,加深 Java 面向对象特性的理解,锻炼利用开发工具实
现 Java 应用软件的基本技能,提高利用面向对象程序设计方法解决实际问题的能力。
四、设计原理及方案
1、使用的软件工具和环境
Eclipse 和 WINDOWS 8 操作系统
2、需求分析与概要设计
如今,微博的使用人群数量基数大,状态信息更新频繁、信息传播迅速。并且微博平台媒介用户占有率相
对集中因此基于微博数据的分析研究成为了十分值得关注的研究方向。因此,对于一些用户,他都关注了那
些人,有哪些人关注了他,成为了我们的研究方向,我们需要抓取一些用户的关注列表和粉丝列表。
抓取用户的关注和粉丝通常有两种方法。一种是调用新浪 API,一种是通过模拟登陆,然而,通过调用
新浪 API 往往会受到诸多的限制,达不到我们的限制,所以,我们组采用了模拟登陆的方法。
2、详细设计和关键问题
关键流程图
1
新浪微博用户粉丝和关注用户抓取流程图
详细类图
2
3
2.关键问题及解决
在这次课程设计当中,我们组遇到了许多问题。
1.HttpClient 模拟登陆无法获取 Cookie
解决方案:通过大量的百度、Google ,发现新浪模拟登陆时,将账号、密码都进行了加密,而我们无
法得知新浪的加密算法,最后我们利用 HTTPfox 分析得到加密的 js 文件,最终成功的得到了新浪的 Cookie。
2.通过 HttpMethod 请求网址之后返回内容出现乱码
解决方案:请求页面返回内容出现乱码,开始不知道哪里出了问题。后来我们研究了一下 UTF-8、GBK、
ISO-8859-1 等各种编码,发现只有将 eclipse、返回内容都改为 GBK 编码才不会出现乱码。
3.单线程抓取效率太低
解决方案:我们发现我们的程序抓取效率太低,无法满足我们的需求,于是,我们采用了多线程机制。
我们将读取 uid、写文件设为临界资源,加锁,只允许一个线程访问,将网页抓取并解析采用多个线程同时
运行。
4,每次运行 Console 无法完全显示运行状态和结果
解决方案:当抓取数据量太大时,Console 控制台无法显示全部信息,无法让我们知道运行状态。我
们调用第三方包 Log4J.jar。将每次的运行状态写入日志文件,方便每次查看。
五、实现效果
实现效果为在本地新建一个 weibo,csv 文件,其中包括六个属性:id(用户 id)、friendslist(关注列表)、
followerslist(粉丝列表)、totalfriends(总粉丝数)、totalfollowers(总关注数)、average(粉丝/关注).
Csv 文本效果图
4
六、关键源代码
Crawl.java
import java.io.IOException;
import org.apache.commons.collections.list.SynchronizedList;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
public class Crawl
implements Runnable{
private static int t=1;
private String cookie;
GetUid getuid;
//**********************
public Crawl(String cookie,GetUid getuid) {
this.cookie=cookie;
this.getuid=getuid;
// TODO Auto-generated constructor stub
}
//**********************
public
synchronized
void WriteCSV(String
uid
,String
friendslist,String
followerlist,String
TotalFollowers,String TotalFriends){
WriteCSV write = new WriteCSV();
String average=write.avera(Integer.parseInt(TotalFollowers),Integer.parseInt(TotalFriends));
write.WriteId(uid,friendslist,followerlist,TotalFollowers,TotalFriends,average);
}
public void run(){
boolean flag=true;
while(flag){
String uid=getuid.getUid();
if(!uid.equals("")){
String s="";
String s1="";
5