Node js请求和cheerio等待页面完全加载

2024-03-27

我正在尝试从页面上抓取图像,但如果该页面未完全加载(需要大约 0.5 秒才能完全加载),该页面会返回占位符源属性,我将如何让请求等待?

尝试做

function findCommonMovies(movie, callback){

    request('http://www.imdb.com/find?ref_=nv_sr_fn&q='+ movie +'&s=all', function (error, response, body) {
      if (error){
          return
      }else{
          var $ = cheerio.load(body);
          var title = $(".result_text").first().text().split("(")[0].split(" ").join('')
          var commonMovies = []
          // var endurl = $("a[name=tt] .result_text a").attr("href")
          var endurl = $('a[name=tt]').parent().parent().find(".findSection .findList .findResult .result_text a").attr("href");


          request('http://www.imdb.com' + endurl, function (err, response, body) {

              if (err){
                  console.log(err)
              }else{

                  setInterval(function(){var $ = cheerio.load(body)}, 2000)

                  $(".rec_page .rec_item a img").each(function(){


                    var title = $(this).attr("title")
                    var image = $(this).attr("src")

                    commonMovies.push({title: title, image: image})
                  });
              }
              callback(commonMovies)
          });
      }
    });

}
findCommonMovies("Gotham", function(common){
  console.log(common)
})

Cheerio 不是网络浏览器。它只是一个 HTML 解析器。这意味着发出异步请求的 JavaScript 函数没有被执行。

所以。除非您使用充当网络浏览器的东西,否则您无法做您想做的事。Selenium https://www.seleniumhq.org/download/例如,向许多网络浏览器添加 API。

只要您想继续向具有异步内容加载的站点发出请求,您就需要下载 Selenium 客户端并继续运行它。

此外,您将需要一个基于您正在使用的语言和您想要的网络驱动程序的包装器。 Webdriver 用于添加对不同 Web 浏览器的支持。

我假设你正在使用 NodeJS 或类似的基于 js 的东西,所以,干得好。 https://www.npmjs.com/package/selenium-webdriver

并且一定要检查API. http://seleniumhq.github.io/selenium/docs/api/javascript/index.html

希望能给大家带来一些帮助。

您还可以检查PhantomJS。 http://phantomjs.org/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Node js请求和cheerio等待页面完全加载 的相关文章

随机推荐