我有一个网页,我正在抓取信息。在网页中,我需要的是在具有特定类别的单独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>
我目前正在使用
获取divvar 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,我不能将for循环限制为我需要的东西,要么拉出所有东西,包括我不需要的东西,如果我设置的话我要么拉得太多,要么太少。
有没有办法在评论之前拉出div?
答案 0 :(得分: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);
&#13;
<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>
&#13;
查找评论标记的代码来自Selecting HTML Comments with jQuery