JS Web抓取工具挂起评估

时间:2018-10-24 23:30:47

标签: javascript html dom web-scraping scraper

我正在构建一个刮板,该刮板需要从多个相邻元素中获取数据。本质上,存在用于显示类别的标题(h3),其旁边是排名表。我正在尝试对字符串进行爬网,以查明该字符串是否在类别中排名,如果是,则该字符串达到的排名(A,B或C),然后用描述目标内容的对象填充数组字符串达到的类别和等级(phe)。

最初,我在while循环中生成了一个错误(“无法定义null的属性'tagName'”,因为 sib 由于某种原因一直将其评估为null。我添加了一个测试,以防它在 arr 的末尾发生,但是现在代码无限期地挂起。我感觉同胞并没有立即被定义,但是我不能指责是这样还是为什么。

我正在测试Chrome DevTools中的所有内容,如果有帮助的话。另外,我没有在DevTools中使用Fat Arrow函数进行测试,因此它本身并不是导致此问题的原因,但是,如果从长远来看,它将使我烦恼,请告诉我!

(str) => {
  let h = document.getElementsByTagName('h3');
  let arr = [];
  let res = [];

  for ( let i = 0; i < h.length; i++){ //Filter out any h3's that are not category headers.
    h[i].id.includes('category-') && arr.push(h[i]);
  };

  for ( let i = 0; i < arr.length; i++){
    let head = arr[i].innerText; //Save the current category header.
    let sib = arr[i].nextElementSibling; //Should be a table containing rank A.
    while ((sib != null) && (sib.tagName == 'TABLE')){
      if(sib.innerText.includes(str)){ //Create an object if the rankings table contains our target.
        let hit = {};
        hit.category = head;
        hit.rank = sib.children[0].innerText;
        res.push(hit);
      }
      else{ //Go to the next table which contains the next rank.
        sib = sib.nextElementSibling;
      };
    };
  };
return res;
}

0 个答案:

没有答案