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

关于Facebook,Linkedin网的数据采集总结

阅读更多

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();
		}
	}

    

 

 

                 

          

     

 

1
0
分享到:
评论

相关推荐

    大数据中数据采集的几种方式.pdf

    常见的日志采集工具有Hadoop的Chukwa、Apache Flume、Facebook的Scribe以及LinkedIn的Kafka等。其中,Flume是一个高可靠性的分布式系统,用于收集、聚合和传输数据。它支持自定义数据源,能够处理各种数据并将其写入...

    python挖掘社交关系

    Python提供了多种工具和库,可以帮助开发者从不同的社交媒体平台如Twitter、Facebook、LinkedIn等抓取数据。这些库包括Tweepy用于Twitter、Facebook Graph API用于Facebook等。通过这些工具,我们可以获取用户的公开...

    海量数据处理平台体系架构分析

    为了适应大规模数据采集的需求,互联网公司开发了一系列高性能的开源工具,如Facebook的Scribe、LinkedIn的Kafka、淘宝的TimeTunnel以及Hadoop的Chukwa等。 - **Chukwa**:Chukwa是一个基于Hadoop的HDFS和Map/...

    [详细完整版]大数据技术.ppt

    此外,还有其他一些工具如Cloudera的Flume、Facebook的Scribe、LinkedIn的Kafka和Hadoop的Chukwa等,它们都能处理每秒数百MB的日志数据采集和传输需求。 - **Flume** 是一种高可用、高可靠性的日志采集系统,支持...

    大数据分析之工具应用(共30张PPT).ppt

    * 大数据技术:数据采集、数据存取、计算结果展现 解决方案: * Hadoop(MapReduce技术) * MongoDB * 流计算(twitter的strom和yahoo!的S4) Hadoop项目介绍: * Hadoop最先是由Apache公司在2005年引入的,起源...

    实时计算-流数据处理系统简介与简单分析.docx

    总的来说,实时计算涉及到多个技术层面,包括数据采集、处理和存储,而选择合适的工具和平台是实现高效实时计算的关键。随着大数据技术的发展,实时计算将继续在各个行业中发挥重要作用,如金融风控、物联网数据分析...

    大数据下的数据分析平台架构.pdf

    它通过数据采集工具(如Facebook的Scribe、LinkedIn的Kafka、淘宝的Timetunnel和Chukwa)收集日志数据,并利用Hadoop的分布式文件系统(HDFS)存储数据,通过MapReduce进行分析。 按照数据量的大小,数据分析平台可...

    大数据下的数据分析平台架构 (2).pdf

    数据采集工具如Facebook的Scribe、LinkedIn的Kafka、淘宝的Timetunnel和Hadoop的Chukwa可用于数据导入和传输至Hadoop系统。 (二) 数据量级别及对应分析架构 1. 内存级别:适用于数据量较小的情况,可使用内存...

    亿级大数据实时分析平台.pptx

    小米的大数据技术框架包括数据采集、存储、管理、分析和可视化等多个环节。数据采集采用Scribe、SDK和Server-to-Server等方式;数据存储主要依赖HDFS、HBase和Kafka等分布式系统;数据管理涉及Hue和Kerberos的安全...

    OReilly Mining the Social Web 2nd Edition Oct-448页

    《Mining the Social Web 2nd Edition》涵盖了从数据抓取到分析的全过程,包括但不限于Twitter、Facebook、Google+、LinkedIn等社交媒体平台的数据采集,以及Python编程语言在数据处理中的应用。此外,书中还讨论了...

    大数据下的数据分析平台架构.docx

    这类分析通常通过数据采集工具,如Facebook的Scribe、LinkedIn的Kafka、淘宝的Timetunnel和Hadoop的Chukwa,将数据导入Hadoop平台进行处理。 2. **按数据量划分**: - 内存级别:数据量小于集群总内存,可通过内存...

    149-硅谷数据中台建设.pdf

    - **数据采集与处理**:涉及文件系统采集、实时采集、批处理采集等环节,确保数据的准确性和及时性。 - **模型即服务**:如推荐系统模型、反欺诈模型等,通过模型即服务的方式为不同的游戏部门提供支持。 通过...

    外贸企业电子邮箱营销软件

    通过LinkedIn、Facebook等社交平台,企业不仅可以获取到客户的联系方式,还能了解到他们的行业背景、业务动态,甚至个人兴趣,从而定制更具针对性的营销策略。这种深度的客户洞察,对于提高邮件打开率和转化率至关...

    条码制作软件 Barcode Studio 15.14.1 中文多语版.zip

    奥地利的 TEC-IT 自 1996 年以来一直在开发用于 条形码, 打印, 标签, 报告 和数据采集 的软件。公司提供标准软件,例如 TFORMer, TBarCode 和 Barcode Studio。 通用数据采集工具,例如 TWedge 或 Scan-IT to Office...

    大数据知识点问答汇编——50个最受欢迎的大数据面试问题(阿里巴巴等大公司必过).docx

    许多知名企业,如沃尔玛、LinkedIn、Facebook、Twitter和美国银行,都已经成功运用大数据分析来优化运营,实现收入增长。 在面试准备时,对大数据的基本概念、Hadoop框架的理解,以及大数据分析的应用案例,都是...

Global site tag (gtag.js) - Google Analytics