正在做关于twitter的数据挖掘的研究,先期需要获取一定量的数据,尝试做了一个小的爬虫。
几个碰到的问题和自己的解决思路,和大家交流一下,第一次先谈谈一些基本问题
1 由于众所皆知的原因,twitter不能直接访问
解决方法无外乎代理。笔者尝试过利用gae假设一个api的方法,但是速度并不理想,如今使用puff做代理直接访问,这个软件会在本机1984端口设立代理
基于httpclient的简单代码如下:
HttpClient client = new HttpClient();
client.getHostConfiguration().setProxy("127.0.0.1", 1984);
client.getParams().setAuthenticationPreemptive(true);
2 选择爬取对象
常规意义的爬虫是面对网页的爬取,不过twitter由于其api的开放性,完全可以面对api来做爬取。这样做的好处很多,不用抽取网页内容、每次请求的http包长度减小,当然,twitter对于api的使用是有一定限制的,官方文档里提及每小时只能请求150次,这个对于高性能的爬虫来说是一个很致命的缺点。对于这点,笔者打算采取分布式架构,从多个客户端去爬取信息,虽然每个爬虫的爬取速度受限,但数量多了,应该能满足要求。
3 获取好友列表
twitter官网的api文档给定了请求response的格式分为xml、json、rss三种,这里笔者选用了json。
对于单一用户的好友,有两种请求方法
http://twitter.com/statuses/friends.json?screen_name=xxx
http://twitter.com/statuses/friends/xxx.json?cursor=-1
前者请求前100个好友,返回jsonarray
而后者则采用分页方式请求,返回jsonobject,其中cursor是请求的起始标志位,在回复的json中会有next_cursor_str这一属性表示下一次分页请求的起始标志位,当这一属性为0,表示好友已经请求完了。
附上获取全部friends的简单代码
String pageString = "http://twitter.com/statuses/friends/xxx.json?cursor=";
List<String> friendsList = new ArrayList<String>(200);
private void getList(String str) {
GetMethod get = new GetMethod(pageString + str);
try {
client.executeMethod(get);
String responseString = get.getResponseBodyAsString();
JSONObject object;
JSONArray array;
object = JSONObject.fromObject(responseString);
array = object.getJSONArray("users");
String crusor = object.getString("next_cursor_str");
for (int i = 0; i < array.size(); i++) {
object = array.getJSONObject(i);
friendsList.add(object.getString("screen_name"));
// System.out.println(object.getString("id"));
}
if (!crusor.equals("0")) {
getList(crusor);
}
} catch (HttpException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
其中用到了json-lib这个json解析库,效率、便捷性方面都有缺陷,后期再找寻替代品。
4 获取特定好友的time_line
关于这个需求,api的基本限制是最多只能获取单一用户的前3200条twitter,当然对于以获取研究数据为目的的简单爬虫来说已经够用了。
基本请求格式为
http://twitter.com/statuses/user_timeline/xxx.json?page=x&count=x
其中count最多为200,没有标志位,但是可以通过用户状态获取用户的tweet总数,然后知道分页的信息。
简单获取用户time_line的代码
String stautsString = "http://twitter.com/statuses/user_timeline/xxx.json?count=x&page=x";
private void getStauts() {
GetMethod get = new GetMethod(stautsString);
try {
client.executeMethod(get);
String responseString = get.getResponseBodyAsString();
System.out.println(responseString);
JSONObject object;
JSONArray array;
array = JSONArray.fromObject(responseString);
System.out.println(array.size());
for (int i = 0; i < array.size(); i++) {
object = array.getJSONObject(i);
System.out.println(object.getString("text"));
}
} catch (HttpException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
分享到:
相关推荐
WEBCRAWLER 网络爬虫实训项目 1 WEBCRAWLER 网 络 爬 虫 实 训 项 目 文档版本: 1.0.0.1 编写单位: 达内IT培训集团 C++教学研发部 编写人员: 闵卫 定稿日期: 2015年11月20日 星期五WEBCRAWLER 网络爬虫实训项目 ...
适合需要一定selenium,想学习结合scrapy爬虫的以及想了解推特一些反爬虫机制的朋友
这款官方Twitter应用软件允许你随时随地访问全球最大的社交网络之一Twitter。 通过应用程序主页,你能够使用Twitter的一切常规功能:关注用户、取消关注、发微薄、转发微博,等等。 使用此程序的最大优势在于,...
爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL...
8-1爬虫实战项目1介绍ev4.mp4 8-2 Scrap教程和第一个爬虫ev4.mp4 8-3 firefox firebug以及 chrome工具.ev4.mp4 8-4 scrap shel分析应用宝网站结构.ev4.mp4 8-5 python实现 scrap爬取应用宝网主页ev4,mp4
twitter数据库 twitter数据库设计 微博数据库设计
仿Twitter源代码 社交网络源码 基于脉聊二开版本这是一款类似于Twitter网站的源代码。利用原代码,你可以快速搭建自己的社交网络平台。程序语言是PHP。数据库采用Mysql。与此同时系统带有注册,评论,转发等功能。...
8-1爬虫实战项目1介绍ev4.mp4 8-2 Scrap教程和第一个爬虫ev4.mp4 8-3 firefox firebug以及 chrome工具.ev4.mp4 8-4 scrap shel分析应用宝网站结构.ev4.mp4 8-5 python实现 scrap爬取应用宝网主 页ev4,mp4
仿Twitter源代码 社交网络源码 基于脉聊二开版本 这是一款类似于Twitter网站的源代码。利用原代码,你可以快速搭建自己的社交网络平台。程序语言是PHP。数据库采用Mysql。与此同时系统带有注册,评论,转发等功能。...
可以使用python实现基本的图片爬取和保存功能,用户可以根据自己需求自定义要爬取的链接,但是相应的也要根据网页结果更改部分代码,代码清晰,思路明确,适合学习python爬虫爬取图片参考。
基于Twitter控制的移动僵尸网络
从网上下载一张图片,利用python的基本爬虫技术,找到图片的地址,复制相应的url,然后进行操作
Detailed advanced twitter user guide.
Twitter上的好友关系数据,可以用于社会网络分析。
Twitter的社交网络连接数据集,包含Twitter当中的用户转发关系。可以用于社交网络数据分析研究
资源包含文件:设计报告word+java学习笔记资料+项目源码 1. 本系统使用myeclipse和eclipse工具开发,数据库使用Mysql数据库,服务器是Tomcat。本人通过大学的学习,已经熟练掌握了这几种软件的开发技术,再加上从...
twitter数据流数据(数据集dataset).ziptwitter数据流数据(数据集dataset).ziptwitter数据流数据(数据集dataset).ziptwitter数据流数据(数据集dataset).ziptwitter数据流数据(数据集dataset).ziptwitter...
【数据说明】本数据是Twitter用户的信息,包含了用户的属性、社交圈(circles)和egonetwork,数据已被做了脱敏处理。数据共有81306个用户和1768149条连边。 nodeId.edges:用户nodeId的egonetwork中的所有连边,...
仿Twitter源代码 社交网络源码 基于脉聊二开版本这是一款类似于Twitter网站的源代码。利用原代码,你可以快速搭建自己的社交网络平台。程序语言是PHP。数据库采用Mysql。与此同时系统带有注册,评论,转发等功能。...