从很多网址获取标记内容

时间:2013-10-08 18:13:31

标签: javascript jquery asp-classic

我有一个情况:在CSV文件中有很多网址 - 超过3000格式:

www.site1.com/product1

www.site1.com/product2

www.site1.com/product3

...

www.site1.com/product3001

从所有页面我必须阅读特定标记 - <div id="cat">category1</div>

我尝试在服务器端解决此问题,但这需要大量服务器资源并导致Time Out错误。然后我想知道 - 有没有办法,我可以用某种java脚本或jQuery做到这一点?在这种情况下,浏览器将占用流量。当然 - 这需要一些时间......但比从服务器获取TimeOut更好。

1 个答案:

答案 0 :(得分:1)

我认为这可以通过一些ajax调用然后查找该特定元素(id =“cat”)。但我猜这些网站必须位于同一服务器/域上才能实现。

我会尝试的另一种方法是创建一个iframe并在循环上加载页面并等待iframe的onload方法,在加载之后我会查找该特定元素并获取其内容...这在某种程度上更有可能工作,但会很慢......

var urls = [url1, url2, url3...]; //get all the urls from your file
var urlsLength = urls.length; //get the number of urls to loop for
var iFrame = document.createElement("iframe"); //create an iframe
var iframeContainer = document.getElementById("iframeContainer"); //iframeContainer must exists on your page, you can even hide it with display="none"
var iFrameBody; //variable to hold the iframe body
iframeContainer.appendChild( iFrame ); //add the iframe to its container
for( var i = 0; i<urlsLength; ++i ){ //loop for all the urls
    iFrame.src = urls[i]; //browse the designated url
    iFrame.onload = function(){ //when it loads, then do your work
        iFrameBody = iFrame.contentDocument || iFrame.contentWindow.document; //get the body of the iFrame
        doSomething( iFrameBody.getElementById("ELEMENT ID TO LOOK FOR") ); //send the element to your functions
    }
}

//this function will receive the element from inside the iframe, you can do whatever you need to 
function doSomething(element){
 var elementHTML = element.innerHTML;
 console.log( element );
}

- 编辑 -

这个方法太慢了,如上面的评论所述,做这个服务器端是(恕我直言)最好的方法,但至少你有其他选择,我会远离AJAX请求在大规模上做这样的事情网址(30+)并坚持iframe,但仍然认为服务器端是GO GO。欢呼声。