Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 计算刮削最后工作页的最快方法_Javascript_Algorithm_Web Scraping_Pagination - Fatal编程技术网

Javascript 计算刮削最后工作页的最快方法

Javascript 计算刮削最后工作页的最快方法,javascript,algorithm,web-scraping,pagination,Javascript,Algorithm,Web Scraping,Pagination,我正试图抓取一个网站,我不想被迫递归地抓取每个页面,直到最后 我希望能够得到最后一页,或者中间的任何一页 大多数时候,这不是一个问题,但是这个网页是不同的。例如: 我在:Logitech上进行搜索查询 该网站返回我想要使用的以下信息: 发现的产品总数:15.000 每页产品数:30 分页:1、2、3、4、…500 15.000/30=500 然而,似乎找到的产品总数是错误的信息,分页也是错误的,因为当我试图访问https://website.com/products?q=Logitech&pag

我正试图抓取一个网站,我不想被迫递归地抓取每个页面,直到最后

我希望能够得到最后一页,或者中间的任何一页

大多数时候,这不是一个问题,但是这个网页是不同的。例如:

我在:Logitech上进行搜索查询

该网站返回我想要使用的以下信息:

发现的产品总数:15.000 每页产品数:30 分页:1、2、3、4、…500 15.000/30=500 然而,似乎找到的产品总数是错误的信息,分页也是错误的,因为当我试图访问https://website.com/products?q=Logitech&page=500 没有产品。这也适用于较低的值,如:499、498、450、400、350等

所以我试着在脑海中计算出可能的页码,最终我得到了实际的最后一个页码:166

我通过检查是否有结果来计算:

如果有结果:按数量x增加值 如果没有结果:按数量x递减值 因此,我制作了一个测试脚本来复制我查找页码repl.it链接的方法:

但我对他的剧本有两个问题,我希望你们能帮我解决:


这个脚本知道正确的值166,因此它可以使用>和一般来说,您不应该知道所有产品的所有页码。您需要的是使用二进制搜索算法找到正确的最大页数。为此,我建议使用HTTP Head request来检查路由是否存在,如果服务器不支持该方法,您可以尝试执行get request并只检查响应的HTTP状态代码,这样您就不需要执行复杂的计算/dom查询来找出正确的最大页数

您的代码将有轻微更改

function findMaxPageCount(totalProductCount = 1000, productPerPage = 1){
  const lo = 1;
  const hi = totalProductCount/productPage;
  let mid;
  let actualMaxPage = -1;
  while(lo <= hi){
    mid = Math.floor((lo + hi)/2.0);

    if(pageExists(mid)){
      actualMaxPage = mid;
      lo = mid + 1;
    }else{
      hi = mid - 1;
    }
  }

  return actualMaxPage;
}

上述方法不会再次搜索同一页,因此读取计数最小,最多为Math.ceillog2totalProductCount/productPage。

Hi,不过代码有问题。我不知道它是什么,但是当最后一页是:170,最大页值是:424时。它将返回错误的值:169而不是170,这是几乎所有不以6结尾的值抱歉,代码现在已修复。应该适用于所有情况。