`
unbounder
  • 浏览: 174340 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

面对twitter的网络爬虫的一些设计思路(1)

    博客分类:
  • java
阅读更多
正在做关于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();
		}
	}


11
0
分享到:
评论
5 楼 卡拉阿风 2010-02-02  
关于2次抓取怎么设置
例如:好友又有新增的情况下。等等
4 楼 johnson.lee 2010-01-29  
看到LZ对json-lib不满意,在下自己实现的JSON API:


望LZ指点
3 楼 johnson.lee 2010-01-29  
前些日子不久,自己写了个爬虫玩玩,开始用的URL的openConnection方法打开一个连接,然后从getInputStream()读取网页的内容,然后从页面中查找URL,这样就碰到了一个问题:http://johnson-lee.iteye.com/blog/566320,实在是没想出招,没办法只好自己用Socket实现HTTP协议,来读取响应内容。找了个网站实验了一下,不过性能上还是比不了URLConnection,自己用Socket实现的请求与响应,在遇到resion服务器响应完成后,有一段时间阻塞,可能是等待流结束的标记,但是同一个URL,用URLConnection就不会,响应完了就立即断开了,后来反编译rt.jar看看sun的源码,还是没找出原因。而且有些服务器响应的<HTML>...</HTML>内容的上一行和下一行分别有个数字,不知道是怎么回事。但是看HTTP协议规范,没看到响应头和主体内容之间,以及响应内容末尾有数字。

见LZ你研究过爬虫,不知道遇到过这种情况没?
2 楼 风小却 2010-01-29  
关注后续的数据挖掘部分。
1 楼 蜗牛创业网 2010-01-28  
呵呵。文字写的不错!

相关推荐

    C++网络爬虫项目

    WEBCRAWLER 网络爬虫实训项目 1 WEBCRAWLER 网 络 爬 虫 实 训 项 目 文档版本: 1.0.0.1 编写单位: 达内IT培训集团 C++教学研发部 编写人员: 闵卫 定稿日期: 2015年11月20日 星期五WEBCRAWLER 网络爬虫实训项目 ...

    微信公众号文章采集爬虫,点赞数,评论数,阅读数,万能key,twitter爬虫,

    微信公众号文章采集爬虫,点赞数,评论数,阅读数,万能key,twitter爬虫,突破twitter限_vxarticle_spider

    Twitter的社交网络连接数据集

    Twitter的社交网络连接数据集,包含Twitter当中的用户转发关系。可以用于社交网络数据分析研究

    Python网络爬虫[从入门到实战]源码分享

    Python网络爬虫是一种用于自动化获取网页数据的技术,它在数据分析、信息检索等领域有着广泛的应用。本资源"Python网络爬虫[从入门到实战]源码分享"提供了学习和实践网络爬虫的宝贵材料,旨在帮助初学者快速掌握...

    Twitter的核心架构设计分析.docx

    1. 网络架构设计:Twitter 的网络架构设计是基于自主设计和开源社区的网络技术,高效地提升集群性能,发布尽可能强的产品。 Twitter 的网络架构设计可以分为三个阶段:第一个阶段是将集群从第三方主机上迁出,第二个...

    仿Twitter源代码 社交网络源码 基于脉聊二开版本 带详细安装视频

    仿Twitter源代码 社交网络源码 基于脉聊二开版本这是一款类似于Twitter网站的源代码。利用原代码,你可以快速搭建自己的社交网络平台。程序语言是PHP。数据库采用Mysql。与此同时系统带有注册,评论,转发等功能。...

    基于ICE的分布式爬虫设计与实现.pdf

    在当今信息技术飞速发展的时代,社交网络如Twitter、Facebook、新浪微博等平台因其集交友、传媒、电商等多功能于一体,吸引了大量用户。由于社交网络庞大的用户基数和活跃度,社交网络数据的分析管理也成为一个重要...

    仿Twitter源代码社交网络源码基于脉聊二开版本带详细安装视频.zip

    仿Twitter源代码 社交网络源码 基于脉聊二开版本这是一款类似于Twitter网站的源代码。利用原代码,你可以快速搭建自己的社交网络平台。程序语言是PHP。数据库采用Mysql。与此同时系统带有注册,评论,转发等功能。...

    python爬虫.docx

    Scrapy是一个专业的爬虫框架,适用于单机爬虫项目,而API爬虫通常涉及付费的第三方服务,如Google或Twitter的API。 文章通过一个简单的例子展示了如何使用Urllib获取网页HTML,以及如何使用sgmllib的子类SGMLParser...

    结合scrapy和selenium爬推特的爬虫总结

    适合需要一定selenium,想学习结合scrapy爬虫的以及想了解推特一些反爬虫机制的朋友

    利用python的爬虫技术爬取网上的图片

    本篇文章将详细讲解如何利用Python的基本爬虫技术来下载网络上的图片。 首先,我们需要了解爬虫的基本原理。爬虫通过模拟浏览器发送HTTP请求到服务器,获取服务器返回的HTML或其他格式的数据,然后解析这些数据提取...

    (源码)基于Python和NetworkX的Twitter网络社群相似度分析系统.zip

    # 基于Python和NetworkX的Twitter网络社群相似度分析系统 ## 项目简介 本项目是一个基于Python和NetworkX库的Twitter网络社群相似度分析系统。项目通过多视图和图间随机游走核(Intergraph Random Walk Kernel, ...

    Twitter数据集 大数据分析

    不过,由于Twitter的API有访问限制,可能需要采用数据爬虫或第三方工具来扩大数据收集范围。 2. 数据预处理:原始数据通常包含噪声和冗余信息,比如HTML标签、URL、特殊字符等。预处理阶段会去除这些无关内容,同时...

    爬虫教程20211221.zip

    网络爬虫,也被称为网页蜘蛛或机器人,是自动抓取互联网信息的一种程序。它通过模拟浏览器的行为,遍历网页并提取所需数据,为数据分析、搜索引擎索引等应用场景提供大量原始资料。在2021年,随着大数据和人工智能的...

    使用 Scrapy 写成的 JK 爬虫,图片源自哔哩哔哩、Tumblr、Instagram,以及微博、Twitter.zip

    爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL...

    爬虫理论剖析到实战演练视频课程上.rar

    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源代码 社交网络源码 基于脉聊二开版本

    仿Twitter源代码 社交网络源码 基于脉聊二开版本 这是一款类似于Twitter网站的源代码。利用原代码,你可以快速搭建自己的社交网络平台。程序语言是PHP。数据库采用Mysql。与此同时系统带有注册,评论,转发等功能。...

    python爬虫爬取美女图片

    Python爬虫技术是数据获取的重要工具,特别是在网络信息丰富的今天,爬虫可以帮助我们批量收集、分析数据。本项目以“python爬虫爬取美女图片”为例,旨在介绍如何使用Python进行网页图片的抓取和保存。 首先,我们...

Global site tag (gtag.js) - Google Analytics