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