获取知乎的话题数据,js写的,但偶尔还是被知乎服务器拦截掉。。。

获取知乎的话题数据,js写的,但偶尔还是被知乎服务器拦截掉。。。

By shiqiren at 2015-08-11
1人收藏 • 3236人看过

var topicArr=new Array();
function GetZhihuData(childID,parentId){
	$.post("http://www.zhihu.com/topic/"+parentId+"/organize/entire?child="+childID+"&parent="+parentId, function(data) {
	  var result=JSON.parse(data);
	  var childData=result['msg'];
	  for(var i=0;i<childData.length;i++){
		GetData(childData[i],parentId);
	  }
	});
}
function GetData(childData,parentId){
	if(childData.length==0) return;
	if(childData[0]==="topic"){
		var id=childData[2];
		var title=childData[1];
		if(typeof topicArr[id] !='undefined') return;
		topicArr[id]=true;
		console.log("insert into carbon_dict (id,title,parentId) values('"+id+"','"+title+"','"+parentId+"')");
	}
	else if(childData[0]==="load"){
		var nextChild=childData[2];
		var nextParent=childData[3];
		
		GetZhihuData(nextChild,nextParent);
		
	}
	else{
		for(var i=0;i<childData.length;i++){
			GetData(childData[i],parentId);
		}
	}
}
console.log('start');
GetZhihuData('','19776749');//跟话题


11 个回复 | 最后更新于 2015-08-13
lincanbin
2015-08-11
#1

被拦截应该是JavaScript的跨域处理机制,这部分属于跨域脚本,除非知乎那边做特别设置,不然一般情况都是不可运行的。


我找了篇文章是介绍这个的:http://blog.jobbole.com/53487/

lincanbin
2015-08-11
#2

要运行,可以关闭浏览器的跨域安全机制,例如Chrome运行时加入如下参数:

1
--disable-web-security

或者在知乎下打开F12,直接粘贴执行。

另外用JavaScript跑这个,还真是卡啊……


http://www.94cb.com/t/2199

以前我调用Wiki的数据,用VB、PHP、Python都写过,这些才是比较合适的工具吧。

lincanbin
2015-08-11
#3

啊不对,你说的是偶尔被拦截,那应该是请求频率过高了,这样很容易被封IP的。

shiqiren
2015-08-11
#4

回复#1 @lincanbin :

我是直接用chrome打开知乎,然后在控制台执行的

lincanbin
2015-08-11
#5

回复#4 @shiqiren :

好卡,有最终的SQL文件吗?

shiqiren
2015-08-11
#6

回复#5 @lincanbin :

数据不齐啊,我等会用c#写个

lincanbin
2015-08-11
#7

回复#6 @shiqiren :

这种多半会封IP吧,如果不封那知乎也做得挺随意。

shiqiren
2015-08-11
#8

回复#7 @lincanbin :

8A1867F5-7BA3-4509-BE69-0A84CA0FCF54.png

改改改

lincanbin
2015-08-11
#9

回复#8 @shiqiren :

你手脚真快

咖咖咖
2015-08-12
#10

回复#8 @shiqiren :

你这是要把论坛,改成问答的额

remenbo
2015-08-13
#11

风格改了不少啊  时尚


登 录


现在注册

QQ  登 录    Weibo  登 录    GitHub  登 录