编写chrome插件采集图片

   pic.hao123.com的图片看起来貌似很不错, 想把它做到Android手机上展示。首先要考虑的问题如果采集这些图片信息(如链接、名称、介绍等)并存储到自己的服务器。有一个简单的方法就是使用浏览器插件的方式,定向爬取这个网站上的网页,并分析html元素,提取所需要的信息,并生成json数据,发送到自己的服务器,由服务器存入数据库。

   简单的定向爬取可以把所有链接入栈并标记是否已经访问过,并对每个链接进行分析,一些不符合规则的链接或者已经访问过的链接可以直接跳过。

   使用什么样的规则来分析网页并提取元素呢?

   一是使用正则表达式,这个玩意很强大,不过编写起来有点麻烦,特别是用来分析元素时,得对每个元素应用正则表达式 -_-...

   二是使用jquery的选择器,这个东东很强大也很好用,可以直接提取出所有需要的item, 并对每个item再提取属性、文本等,所以分析元素时,可以考虑这个,大大的。

   实际过程中,可以使用以上两个方法的结合,比如要查找的数据被包含在一段json中,那可以先用正则表达式提取到json数据,然后将json数据转为json对象,然后再使用jquery的选择器功能,提取所需要的元素的值。例如(注释为使用正则表达式的方式,后来发现很多数据不在json里,所以就没有使用这个方法了):

function extractPicture() {
	/*var searchFilter = "(\\[\\{.*?\\}\\])";
	var searchPattern = RegExp(searchFilter, "gi");
	var matchs = document.documentElement.innerHTML.match(searchPattern);
	if (matchs && matchs[0]) {
		console.log(matchs[0]);
		var dataObj= $.parseJSON(matchs[0]);//转换为json对象 
		alert(dataObj.length);//输出root的子对象数量 
	}
	*/

	var objectArray = new Array();
	var $items = $('.pic-item');
	console.log("item counts: " + $items.length + "\n");
	$items.each(function() {
		var object = new Object();
		$(object).attr('url', $(this).attr('src'));
		$(object).attr('image', $(this).attr('src'));
		$(object).attr('preview', $(this).attr('src'));
		$(object).attr('id', $(this).attr('pid'));
		$(object).attr('title', $(this).find('.pic-intro a').text());
		$(object).attr('referer', document.location.href);
		var width = $(this).find('.poster-link').css('width');
		if (width) {
			$(object).attr('width', width.substr(0, width.length - 2));
		}
		var height = $(this).find('.poster-link').css('height');
		if (height) {
			$(object).attr('height', height.substr(0, height.length - 2));
		}		
		objectArray.push(object);
	});
	console.log(JSON.stringify(objectArray));

}

  关于如何编写Chrome插件, 可以参考 http://developer.chrome.com/extensions/docs.html

posted @ 2013-02-06 15:37  黄耀  阅读(778)  评论(0编辑  收藏  举报