Facebook,Linkedin社交网站的模拟登陆和数据采集:
1.模拟登陆:
对于facebook,直接使用模拟用户请求获取用户cookie值的方法经测试较难或根本行不通,后使用 selenium框架通过代码对浏览器进行直接操作,获取操作账户的cookie值.
对于linkedin,因网站相似,使用相同的方法获取用户的cookie.
2.数据采集:
Facebook网数据采集:
1).通过关键字获取用户列表任务
通过模拟查询请求获取到的返回值response不是纯html格式的网页源码,需要对返回值进行调查研究,查找关键内容所在,经调查得知:关键内容在code标签下,并使用注释符注释,在使用源码解析Jsoup解析时,被注释掉的信息是不进行解析的,经查找,替换,使用Jsoup工具解析后获取到所需信息
2).获取用户最新发布的动态信息任务
和获取用户列表信息任务类似
Linkedin网数据采集:
1).通过关键字获取用户列表任务
模拟请求获取的返回值是类html的数据,关键内容经调查存放在code标签下,使用注释符注释,且以json的形式存在。
2).获取用户最新发布的动态信息任务
请求返回的数据存放在类js的数据结构下面,并使用注释符注释,以json的形式存在!
对于此次数据采集关键的地方在于模拟登陆获取cookie,对返回值进行解析!
附上部分网站解析模块的代码:
linkedin:
public void parserUserInfo() { String idStr=""; File file=new File("d:\\facebook.html"); String htmlcode=FileUtil.readString4("d:\\facebook.html"); htmlcode=htmlcode.replace("<!--", " "); htmlcode=htmlcode.replace("-->", " "); Document doc=null; doc = Jsoup.parse(htmlcode); List<Element> userIdList=new ArrayList<Element>(); userIdList=doc.select("._s0").select("._2dpc").select("._rw").select(".img"); if(userIdList.size()>0){ Element userId=userIdList.get(0); idStr=userId.attr("id"); System.out.println(idStr); idStr=idStr.substring(idStr.lastIndexOf("_")+1); System.out.println(idStr); } List<Element> moreList=new ArrayList<Element>(); moreList=doc.select(".pam").select(".uiBoxLightblue").select(".uiMorePagerPrimary"); if(moreList.size()>0){ Element more=moreList.get(0); String moreStr=more.attr("href"); moreStr="https://www.facebook.com/"+moreStr+"&"+idStr+"&__a=1"; System.out.println(moreStr); } List<Element> list=doc.select("._3u1").select("._gli").select("._5und"); System.out.println("数据大小:"+list.size()); for(int i=0;i<list.size();i++){ Element e=list.get(i); List<Element> nameList=new ArrayList<Element>(); nameList=e.select("._6a").select("._6b").select("._5d-4"); if(nameList.size()>0){ Element u=nameList.get(0); System.out.println(u.text()); } List<Element> glmList=new ArrayList<Element>(); glmList=e.select("._glm"); if(glmList.size()>0){ Element glm=glmList.get(0); System.out.println(glm.text()); } List<Element> ajwList=new ArrayList<Element>(); ajwList=e.select("._ajw"); if(ajwList.size()>0){ String myInfoStr=""; for(int j=0;j<ajwList.size();j++){ Element myInfo=ajwList.get(j); myInfoStr=myInfoStr+" "+myInfo.text(); } System.out.println(myInfoStr); } List<Element> imgList=new ArrayList<Element>(); imgList=e.select("._8o").select("._8s").select(".lfloat").select("._ohe"); if(imgList.size()>0){ Element img=imgList.get(0); List<Element> imList=new ArrayList<Element>(); imList=img.select("img"); if(imList.size()>0){ Element im=imList.get(0); String imgSrc=im.attr("src"); System.out.println(imgSrc); } System.out.println(""); } } }
linkedin:
@Override public void parserUserPageInfo() { List<UserPublish_Linkedin> parserPublicList=new ArrayList<UserPublish_Linkedin>(); // htmlcodeUserPage=FileUtil.readTxtFile("D://linkedin.txt"); // htmlcodeUserPage=FileUtil.readString4("D://linkedin.txt"); int firstIndex=htmlcodeUserPage.indexOf("_nS('com.linkedin.shared.controllers.FsController')"); int lastIndex=htmlcodeUserPage.indexOf("--></code><script id="); htmlcodeUserPage=htmlcodeUserPage.substring(firstIndex,lastIndex); System.out.println(htmlcodeUserPage); int efirstIndex=htmlcodeUserPage.indexOf("updates"); htmlcodeUserPage="{\""+htmlcodeUserPage.substring(efirstIndex); System.out.println(htmlcodeUserPage); try { JSONObject dataJson=new JSONObject(htmlcodeUserPage); JSONObject updatesJson=dataJson.getJSONObject("updates"); // JSONObject blocksJson=updatesJson.getJSONObject("blocks"); JSONArray blocksArray=updatesJson.getJSONArray("blocks"); for(int i=0;i<blocksArray.length();i++){ UserPublish_Linkedin userPublish=new UserPublish_Linkedin(); JSONObject blocksJson=blocksArray.getJSONObject(i); // JSONObject mblocks=blocksJson.getJSONObject("blocks"); JSONArray mBlocks=blocksJson.getJSONArray("blocks"); //text Start JSONObject nBlocks=mBlocks.getJSONObject(2); JSONArray wadss=nBlocks.getJSONArray("wads"); JSONObject wads=wadss.getJSONObject(0); String text=wads.get("text").toString(); userPublish.setPublishContent(text); System.out.println(text); //text End //time Start JSONObject timeBlocks=mBlocks.getJSONObject(1); JSONArray timemArray=timeBlocks.getJSONArray("blocks"); JSONObject time=timemArray.getJSONObject(1); String timeAgo=time.get("timeAgo").toString(); userPublish.setPublishTime(timeAgo); System.out.println(timeAgo); //time End //nickName Start JSONObject nickBlocks=mBlocks.getJSONObject(0); String nickName=nickBlocks.get("name").toString(); userPublish.setNickName(nickName); System.out.println(nickName); //nickName End //uId Start String updateId=blocksJson.getString("updateId"); System.out.println(updateId); //uId End Date date=new Date(); String crawlerTime=sdf.format(date); userPublish.setCrawlerTime(crawlerTime); // userPublish.setLinkedinUserId(param.getUser().getId()+""); // userPublish.setUserUid(param.getUser().getUid()); userPublish.setuId(updateId); parserPublicList.add(userPublish); } } catch (JSONException e) { e.printStackTrace(); } }
相关推荐
常见的日志采集工具有Hadoop的Chukwa、Apache Flume、Facebook的Scribe以及LinkedIn的Kafka等。其中,Flume是一个高可靠性的分布式系统,用于收集、聚合和传输数据。它支持自定义数据源,能够处理各种数据并将其写入...
Python提供了多种工具和库,可以帮助开发者从不同的社交媒体平台如Twitter、Facebook、LinkedIn等抓取数据。这些库包括Tweepy用于Twitter、Facebook Graph API用于Facebook等。通过这些工具,我们可以获取用户的公开...
为了适应大规模数据采集的需求,互联网公司开发了一系列高性能的开源工具,如Facebook的Scribe、LinkedIn的Kafka、淘宝的TimeTunnel以及Hadoop的Chukwa等。 - **Chukwa**:Chukwa是一个基于Hadoop的HDFS和Map/...
此外,还有其他一些工具如Cloudera的Flume、Facebook的Scribe、LinkedIn的Kafka和Hadoop的Chukwa等,它们都能处理每秒数百MB的日志数据采集和传输需求。 - **Flume** 是一种高可用、高可靠性的日志采集系统,支持...
* 大数据技术:数据采集、数据存取、计算结果展现 解决方案: * Hadoop(MapReduce技术) * MongoDB * 流计算(twitter的strom和yahoo!的S4) Hadoop项目介绍: * Hadoop最先是由Apache公司在2005年引入的,起源...
总的来说,实时计算涉及到多个技术层面,包括数据采集、处理和存储,而选择合适的工具和平台是实现高效实时计算的关键。随着大数据技术的发展,实时计算将继续在各个行业中发挥重要作用,如金融风控、物联网数据分析...
它通过数据采集工具(如Facebook的Scribe、LinkedIn的Kafka、淘宝的Timetunnel和Chukwa)收集日志数据,并利用Hadoop的分布式文件系统(HDFS)存储数据,通过MapReduce进行分析。 按照数据量的大小,数据分析平台可...
数据采集工具如Facebook的Scribe、LinkedIn的Kafka、淘宝的Timetunnel和Hadoop的Chukwa可用于数据导入和传输至Hadoop系统。 (二) 数据量级别及对应分析架构 1. 内存级别:适用于数据量较小的情况,可使用内存...
小米的大数据技术框架包括数据采集、存储、管理、分析和可视化等多个环节。数据采集采用Scribe、SDK和Server-to-Server等方式;数据存储主要依赖HDFS、HBase和Kafka等分布式系统;数据管理涉及Hue和Kerberos的安全...
《Mining the Social Web 2nd Edition》涵盖了从数据抓取到分析的全过程,包括但不限于Twitter、Facebook、Google+、LinkedIn等社交媒体平台的数据采集,以及Python编程语言在数据处理中的应用。此外,书中还讨论了...
这类分析通常通过数据采集工具,如Facebook的Scribe、LinkedIn的Kafka、淘宝的Timetunnel和Hadoop的Chukwa,将数据导入Hadoop平台进行处理。 2. **按数据量划分**: - 内存级别:数据量小于集群总内存,可通过内存...
- **数据采集与处理**:涉及文件系统采集、实时采集、批处理采集等环节,确保数据的准确性和及时性。 - **模型即服务**:如推荐系统模型、反欺诈模型等,通过模型即服务的方式为不同的游戏部门提供支持。 通过...
通过LinkedIn、Facebook等社交平台,企业不仅可以获取到客户的联系方式,还能了解到他们的行业背景、业务动态,甚至个人兴趣,从而定制更具针对性的营销策略。这种深度的客户洞察,对于提高邮件打开率和转化率至关...
奥地利的 TEC-IT 自 1996 年以来一直在开发用于 条形码, 打印, 标签, 报告 和数据采集 的软件。公司提供标准软件,例如 TFORMer, TBarCode 和 Barcode Studio。 通用数据采集工具,例如 TWedge 或 Scan-IT to Office...
许多知名企业,如沃尔玛、LinkedIn、Facebook、Twitter和美国银行,都已经成功运用大数据分析来优化运营,实现收入增长。 在面试准备时,对大数据的基本概念、Hadoop框架的理解,以及大数据分析的应用案例,都是...