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