2016-11-11 43 views
2

我有一個網頁,我正在抓取信息。在網頁中,我需要的東西都在具有特定類的單獨的div中。在評論之前只颳去元素

例如:

<div class="temp">text </div> 

的問題是,有每天不同量這些div的,有些天有5個,那麼也許10或12,我需要的div之後更加的div與同一班,但有我不需要的信息。在html中,有一條註釋行將兩者分開。像這樣:

<div class="temp">text </div> 
<div class="temp">moretext </div> 
<!-- beginning of historical data --> 
<div class="temp">text </div> 

我目前得到的div

var temps = window._document.getElementsByClassName('temp') 
for (var I = 0; I < temps.length; i++){ 
var a = temps [i].getElementsByTagName('a') 
var text = temps [i].textContent 
//do something with vars } 

這是偉大的工作,但因爲我不知道我不能限制有多少的div是註釋前循環到我需要的東西,並拉動一切,包括我不需要的東西,如果我設置一個限制,我拉或太拉或太拉。

有沒有辦法在評論前拉動div?

回答

0

這就是你所描述的HTML給出的例子,但它假定有趣的div元素和註釋都是body元素的子元素,並且在文檔中只有一個註釋。

一般的概念是找到註釋標籤的索引,只處理索引較低的div。

(另一種假設是,您的瀏覽器是ECMA-6)

function doSomethingWithTemps() { 
 
    var commentIndex = $('*').contents().filter((i,v) => v.nodeType == 8).index(); 
 
    $('.temp').filter((i,v) => $(v).index() < commentIndex).each((i,v) => console.log(v.textContent)); 
 
} 
 

 
function nonEcma6() { 
 
    var commentIndex = $('*').contents().filter(function(i,v) { return v.nodeType == 8 }).index(); 
 
    console.log("Index: "+commentIndex); 
 
    $('.temp').filter(function(i,v) { return $(v).index() < commentIndex }).each(function(i,v) { console.log(v.textContent) }); 
 
} 
 

 
$(nonEcma6);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<body> 
 
<div class="temp">text </div> 
 
<div class="temp">moretext </div> 
 
<!-- beginning of historical data --> 
 
<div class="temp">text </div> 
 
</body>

代碼查找註釋標記是從Selecting HTML Comments with jQuery

+0

我要把這一個去第一件事就是明天。如果這種方式運作良好,我將完成並能夠進入一個新項目。你的假設也是正確的。 – jcalton88

+0

這似乎不工作。它在nodejs的jsdom窗口中運行,會有所作爲嗎?我運行它時沒有返回或打印任何東西。 – jcalton88

+0

修改了包含非ecma 6版本的答案。看看這是怎麼回事。將幫助,如果你會描述發生的事情,而不是隻是「似乎沒有工作」 – Tibrogargan