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

By shiqiren at 2015-08-11 • 1人收藏 • 682人看过
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
2015-08-11   #1

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


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

2015-08-11   #2

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

1
--disable-web-security

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

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


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

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

2015-08-11   #3

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

2015-08-11   #4

回复#1 @lincanbin :

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

2015-08-11   #5

回复#4 @shiqiren :

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

2015-08-11   #6

回复#5 @lincanbin :

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

2015-08-11   #7

回复#6 @shiqiren :

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

2015-08-11   #8

回复#7 @lincanbin :

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

改改改

2015-08-11   #9

回复#8 @shiqiren :

你手脚真快

2015-08-12   #10

回复#8 @shiqiren :

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

2015-08-13   #11

风格改了不少啊  时尚

登录后方可回帖

登 录
信息栏
购买PHP虚拟主机 / VPS

Carbon Forum是一个基于话题的高性能轻型PHP论坛

下载地址:Carbon Forum v5.0.1
QQ群:12607708(QQ我不常上)

donate

手机支付宝扫描上方二维码可向本项目捐款

Loading...