网络爬虫:

网络爬虫是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本,是搜索引擎的重要组成。传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在爬取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。

图1 网络爬虫基本原理图

网络爬虫的基本工作流程如下:

1.首先选取一部分精心挑选的种子URL;

2.将这些URL放入待抓取URL队列;

3.从待抓取URL队列中取出待抓取在URL,解析DNS,并且得到主机的ip,并将URL对应的网页下载下来,存储进已下载网页库中。此外,将这些URL放进已抓取URL队列。

4.分析已抓取URL队列中的URL,分析其中的其他URL,并且将URL放入待抓取URL队列,从而进入下一个循环。

API

开放应用程序的API(即Application Program Interface,应用程序接口)可以让开发者在无需访问源码,或理解内部工作机制细节的情况下,调用他人共享的功能和资源。开发者可以通过认证,根据企业规提供的编程接口,限制性的获取自己需要的数据来开发自己的应用。

像国内新浪微博、腾讯微博、百度地图、高德地图等等很多应用都开发了自己的应用接口。开发者在注册完账户,申请自己的相关应用就可以获取平台数据。

网络爬虫与应用API的区别

复杂度:网页爬虫爬取数据要比API获取数据要复杂的多,网页爬虫不仅需要解析网页还需要考虑爬取算法等一些因素,而API得使用就要想多简单的多,一般直接使用应用提供的数据接口,直接能获取到相关数据。

爬取限制:网页爬虫理论上爬取数据是没有限制的,但是有些网站会采取一些相关的反爬虫的技术,如IP限制,js数据写入。但是只要你技术牛,你就可以采取反反爬虫,因此说网页爬虫是没有限制的。但是使用API是受到爬取数据量的限制,已经爬取相关数据的限制。

返回数据:网页爬虫爬取相关界面以后,往往需要处理简析html界面,然后进行判断,数据的整合,最后才能返回结构化的数据。但是API一般使用一个URl地址或者调用一个函数,就能返回一个结构化的数据,如返回json或者XMl数据。

注册认证:网页爬虫不需要注册认证,你爬取对方的数据时不需要通知数据提供商(听起来好像是在窃取他人财产),写完爬虫程序就可以爬取数据。而API是调用数据提供商的接口,你首先得注册一个账号,然后获取你应用的授权才能使用接口。

获取TwitterAPI keys

•      注册一个Twitter账号

•      到https://apps.twitter.com/登入twitter账号

•      点击“Create New App”,新建你自己的应用

•      填写应用信息表单, 然后点击“Create your Twitter application”生成你的twitter应用

•      在“keys and Access Tokens”界面, 点击“API keys”, 然后记录你的“API key” 和"API secret".

•      在“keys and Access Tokens”界面点击“Create my access token”, 记录你的"Access token" and "Access token secret".

这里我就不啰嗦一步一步截图了,按照上面一步一步做就行。但是只里面有一个坑,需要注意的:twitter在创建应用时,你的twitter账号一定要绑定你的手机,但是国内的手机运营商收不到验证码。这里好像可以用手机版twitter去绑定手机号(实测联通可以收到验证码,电信好像不可以,移动没试过)

使用TwitterAPI

这里我使用的twitter4J来调用twitter接口。

Twitter4j:http://twitter4j.org/en/index.html

在这里你下载twitter4j的zip包然后解压,将lib下面的这些jar包导入你的项目中。

twitter4j-core-source.jar包是自己打包的源码包,用来查看函数源码。

注:twitter4j的文档写的很不全,参考意义不是很大,你可以结合下载zip包中的examples文件夹中的例子还可以看twitter官网的Twitter REST APIs:https://dev.twitter.com/rest/public

twitter4j是的使用需要翻墙代理,还有当你设置好以后,有可能会碰到链接拒绝(看你用的什么代理),因为eclipse默认走的是ipv6协议,具体解决方法可以参考我这篇文章:

http://blog.csdn.net/u013817676/article/details/51906754

这里我就举一个爬取某个人物的最新推文

import java.io.IOException;
import java.util.Date;
import java.util.List;
import twitter.common.GetConfiguration;
import twitter4j.Paging;
import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterException;

/*
 * getUserTimeline(user)
 * get users tweets
 */
public class GetUserTimeline{
   publicstatic void main(String[] args)throws TwitterException, IOException {
      GetConfiguration conf = new GetConfiguration();
      Twitter twitter = conf.getNewInstance();
      List<Status> statuses;
      String user = "BillGates";
      Paging page = new Paging();
      page.count(20);
      statuses = twitter.getUserTimeline(user, page);
      System.out.println("Showing@"+ user + "'suser timeline.");
      for (Status status : statuses) {
         //status.getRetweetCount() 转推的数目
         // status.getFavoriteCount() 点赞次数
         // status.getSource() 发布的客户端类型
         // status.getCreatedAt() 发布时间
         // status.getGeoLocation() 地点
         // status.getId() 获取该条tweet Id
        
Stringcontent = status.getText(); // tweet内容
        
StringScreenName = status.getUser().getScreenName();
         Date publishDate =  status.getCreatedAt();
         System.out.println("@"+ ScreenName +"--"+ content + "--"+publishDate);
         //System.out.println(status.getUser().getName() + ":" +
         // status.getText());
        
StringtweetUrl = "https://twitter.com/"+ status.getUser().getScreenName() + "/status/"+ status.getId();
         System.out.println("tweetUrl:"+ tweetUrl);
         if (status.getMediaEntities() !=null && status.getMediaEntities().length>=1) {
            try {
               String type =status.getMediaEntities()[0].getType();
               if (type.equals("photo")) {
                  String imgUrl =status.getMediaEntities()[0].getMediaURL();
                  System.out.println("imgUrl:"+ imgUrl);
               } else if (type.equals("video")) {
                  String videoUrl =status.getMediaEntities()[0].getMediaURL();
                  System.out.println("videoUrl:"+ videoUrl);
               } else {
                  String animatedGifUrl =status.getMediaEntities()[0].getMediaURL();
                  System.out.println("animatedGifUrl:"+ animatedGifUrl);
               }

} catch(Exception e) {
               System.out.println("Status:"+ status);
               System.out.println(e.getStackTrace());
            }
         }
         if (status.getRetweetedStatus() !=null) {
            // 如果这条消息是转发的
            //System.out.println("sourceTweet:"+status.getRetweetedStatus());
            //System.out.println(tweetUrl);
           
StringreScreenName = status.getRetweetedStatus().getUser().getScreenName();
            Long RetweetedId =status.getRetweetedStatus().getId();
            //System.out.println("getMediaEntities:"+status.getRetweetedStatus().getUser().getScreenName());
            //System.out.println("getMediaEntities:"+status.getRetweetedStatus().getId());
           
StringretweetUrl = "https://twitter.com/"+ reScreenName
                  + "/status/" + RetweetedId;
            System.out.println("retweetUrl:"+retweetUrl);
         }
      }
   }
}

GetConfiguration类代码

import twitter4j.Twitter;
import twitter4j.TwitterFactory;
import twitter4j.conf.ConfigurationBuilder;public class GetConfiguration {public Twitter getNewInstance(){ConfigurationBuilder cb = new ConfigurationBuilder();cb.setDebugEnabled(true).setOAuthConsumerKey("XQOBGSC66gqLulaEPNtJc****").setOAuthConsumerSecret("UsNDcBdllprdnP0qH41CaYMYgNZDZUoFq0Qhj78uGCn6a****").setOAuthAccessToken("4678138488-nhpI9HlnYQEH3MiWY87WgYKisMZnmB****Yhr3H").setOAuthAccessTokenSecret("6RPOWclehdb****U6rbcdmleLUsjxQ8wujA7WHZqOEkFs");TwitterFactory tf = new TwitterFactory(cb.build());//Twitter twitter = tf.getSingleton();Twitter twitter = tf.getInstance();return twitter;}}

应用:

1.Towardsa realtime Twitter analysis duringcrises for operational crisis management

2011年风暴袭击比利时Pukkelpop音乐节前后抽取97000条相关风暴推文,自动过滤抽取一些重要信息(包括一些谣传信息)来进行危机管理。

2.Twitter英文用户眼中的中国

通过爬虫技术获取与中国相关推文922447条,采用主题建模和情感分析两种技术进行探索性分析。

“饮食”成为 twitter 英文用户关注中国程度最高的主题,政治类的主题关注度高于经济、社会等其他类别,日常生活等微观类主题的关注度持平于宏观类主题。

Twitter英文用户发布的推文多为积极态度, 但消极态度的推文比例也很高,只有少数推文带有明显的情感(如喜悦、愤怒);情情感随年份的变化非常小,Twitter 英文用户对中国的情感相对稳定,难以变化。

3.PsychologicalLanguage on Twitter Predicts County-Level Heart

DiseaseMortality

研究人员主要研究了美国地区,在2009到2010年这段区间里,对特定地点的推文进行研究。之后,研究人员把这些推文数据和美国疾病控制预防中心内的1300歌本地数据进行了对比。

负面情绪语言和主题,比如像敌意侵略型的词“fuck”、“shit”词;压力厌恶型的词“hate”,“jealousy”;疲倦,厌倦类词“boring”,“tired”都跟冠心病死亡率正相关,而一些积极的主题词。

参考

http://www.cnblogs.com/wawlian/archive/2012/06/18/2553061.html

TerpstraT, de Vries A, Stronkman R, et al. Towards a realtime Twitter analysis duringcrises for operational crisis management[M]. Simon Fraser University, 2012.

易红发, 肖明, 彭继春,等. Twitter英文用户眼中的中国(2006-2013)——基于主题建模和情感分析的探索[C]// 2014中国传播论坛:“国际话语体系与国际传播能力建设”研讨会会议论文集. 2014.

EichstaedtJ C, Schwartz H A, Kern M L, et al. Psychological language on Twitter predictscounty-level heart disease mortality[J]. Psychological science, 2015, 26(2):159-169.

twitter APi的使用与twitter数据的应用相关推荐

  1. 【Twitter API开发者账户协议必知】

    Twitter API协议必知 中文 英文 中文 开发商协议 生效日期:2022年10月10日 本Twitter开发者协议(以下简称"协议")由您(个人或实体,以下简称" ...

  2. Twitter API: Door To Social Media Analysis I

    个人博客地址在 https://mengjiexu.com/post/door-to-twitter-analysis-i/ 文章目录 Motivation Get Access To Twitter ...

  3. 不通过twitter API获取Twitter数据的方法

    不通过twitter API调用Twitter数据 前言 1.Python库的导入 2.网络问题的解决 2.1.可能遇到的错误 2.1.1.Cannot Connect to host twitter ...

  4. 【笔记】使用Twitter API V2进行数据爬取的经验总结

    写在最前面:这篇笔记主要是基于自己使用API过程中遇到的问题以及不断的尝试形成的经验总结,所有内容都是一个字一个字敲的,所以还挺辛苦的.不过也正是因为这只是一些个人经验的归纳,所以对于API的函数和功 ...

  5. twitter api 无法连接_光大银行牟健君:金融API的安全问题和应对技术

    点击蓝字 关注我们 11月3日,由北京金融科技产业联盟.移动支付网主办的2020第五届中国金融科技安全大会在深圳顺利召开.光大银行安全管理处处长牟健君以<构建API安全体系护航银行数字生态> ...

  6. Python 使用 twitter API 获取twitter用户信息

    Python 使用 twitter API 获取twitter用户信息 1. 概述 twitter作为国外极其大众化的社交平台,具有大量的海外用户,平台流动数据量极大,是国外人群生活数据的重要来源之一 ...

  7. Python连接Twitter API读取用户画像及推特评论

    使用Twitter API获取推特数据 最近由于实验室研究需求,需要对Twitter15及Twitter16数据集进行扩展.具体为:1.根据user_id,获取用户画像:2.根据tweet_id,获取 ...

  8. twitter api使用_如何使用rtweet和R搜索Twitter

    twitter api使用 Twitter是有关R的重要新闻来源,尤其是在useR之类的会议期间! 和RStudio会议. 借助 R和rtweet软件包 ,您可以构建自己的工具来下载tweet,以便于 ...

  9. twitter api使用_使用P2创建自己的Twitter风格的组博客

    twitter api使用 Would you like a great way to post stuff quickly online and communicate with your read ...

最新文章

  1. Oracle 小知识点
  2. codevs 1147 排座椅
  3. 大型数据中心蓄电池规划与应用中的痛点及展望
  4. 魔兽世界 服务器维护,魔兽世界8.0:服务器崩溃紧急维护三小时 网易这次得背大锅!...
  5. max与top的效率
  6. 大楼通信综合布线系统_系统梳理一下综合布线系统的方方面面
  7. C++ STL 容器之 deque简单使用
  8. docker部署sprinboot项目
  9. Django最新版(1.10.5)在SAE上面部署流程
  10. node.js抓取数据(fake小爬虫)
  11. Sk32k144:生成hex文件和烧写(jflash)
  12. Halcon常用图像预处理算子总结
  13. 远程连接virtualBox本地虚拟机并访问虚拟机服务
  14. OSN3500设备PSXCS单板的工作原理和信号流
  15. C语言 动态内存分配
  16. 《靠谱》里提到的书目
  17. python居然还能画出这么精美的魔法少女,惊我一整年
  18. Psychtoolbox刺激呈现工具包的安装及下载
  19. 针对某个WEB渗透的整套修复建议(更新部分)
  20. 【Python】自动化办公之Excel拆分并自动发邮件

热门文章

  1. 智慧燃气系统基于GIS技术的搭建
  2. Android 8.0 开机动画,RK3326 android10.0(Q) 开机logo+开关机动画替换
  3. jsp中c标签的详细使用
  4. kd树搜索(k邻近法)
  5. gamit错误提示:PCN-code missing for receiver type TRMR12 in rcvant.dat
  6. Numpy学习1:dtype、ndim、astype和shape
  7. myaql数据库如何建表
  8. SAP新的Activate实施方法论都有什么变化
  9. 面试题:数据库优化的方法
  10. OTFS-SCMA学习笔记