`
kevinflynn
  • 浏览: 39082 次
  • 性别: 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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics