检查获取的URL中是否存在元素

时间:2015-06-17 16:55:10

标签: javascript jquery python web-crawler window.open

我有一个页面,例如30个URL,我需要点击每个页面并检查一个元素是否存在。 目前,这意味着:

$('area').each(function(){
    $(this).attr('target','_blank');
    var _href = $(this).attr("href"); 
    var appID = (window.location.href).split('?')[1];
    $(this).attr("href", _href + '?' + appID);
    $(this).trigger('click');
});

这会打开30个新标签,我会手动浏览它们。

(所有网址都在同一个域中)

如果爬虫具有以下逻辑,那将是非常好的:

$('area').each(function(){

 1) get the HREF
 2) follow it
 3) on that new page:
    if($('.element')){
     push the $('area') into array1 
    } else {
     push the $('area') into array2
        }
    });


   4) Display array1 in green
      Display array2 in red

基本上,我想生成一份报告:

X抓取的网页 元素Y

Z抓取的网页没有元素Y

我显然坚持让Javascript / jQuery在新打开的标签中工作。

我找到了thisthisthis,但我不完全确定这是否可行。

这可以用Javascript / jQuery完成吗?

我只是要求正确的方向,我自己会做这些步骤。

非常感谢

1 个答案:

答案 0 :(得分:1)

我建议你使用iframe来加载页面。

例如:

$.each($your-links, function(index, link) {
    var href = $(link).attr("href");
    // your link preprocess logic ...

    var $iframe = $("<iframe />").appendTo($("body"));
    $iframe.attr("src", href).on("load", function() {
        var $bodyContent = $iframe.contents().find("body");
        // check iframe content and remove iframe
        $iframe.remove();
    }
}

但是,我应该说,如果您的抓取工具和已检查的网页有不同的网域,则会出现CORS问题。

我创建了一个简单的项目,展示了如何实现这种方法。 您可以下载here并在某个本地Web服务器(apache,iis等)上运行。