Cheerio - Node js 抓取评论和星星数量

更多是你

我试图从 yelp 和 google 地方获取链接,并根据他们的评论数量刮掉他们的星级评分。我已经设法让 yelp URL 抓取器正常工作,但是当我尝试对 Google URL 使用相同的方法时,我要么为 .text(); 返回空字符串;或未定义的 .attr();

这是我试图抓取的 HTML

<div class="review-score-container">
  <div style="display:inline-block">
    <span style="font-size:32px;margin-right:11px" class="rtng" aria-
    hidden="true">4.9</span>
    <g-review-stars>
      <span class="_pxg _Kxg" aria-label="Rated 4.9 out of 5,">
        <span style="width:100px"></span>
      </span>
    </g-review-stars>
    <div style="display:inline;font-size:15px;margin-left:11px">
      <span class="_Mnc _yz" style="white-space:nowrap">96 reviews</span>
    </div>
  </div>
</div>

这也可以在下面的 googleURL 链接中找到

var request = require('request')
var cheerio = require('cheerio')

var yelpURL = 'https://www.yelp.com/biz/yo-way-gardena'
var googleURL = 'https://www.google.com/search?rlz=1C1CHBF_enUS771US771&ei=9UafWtn0IaiZjwTXrJn4CQ&q=yo-way&oq=yo-way&gs_l=psy-ab.3..0l3j0i67k1l2j0i30k1l5.4447.5658.0.5873.15.8.0.0.0.0.152.868.3j5.8.0....0...1c.1.64.psy-ab..11.4.450...33i160k1j0i22i30k1j0i22i10i30k1.0.DnG3LoY6RC0&npsic=0&rflfq=1&rlha=0&rllag=38062739,-95056704,2059057&tbm=lcl&rldimm=5797977981249230753&ved=0ahUKEwi1g6eHjtnZAhUm54MKHdxpDVoQvS4IRTAA&rldoc=1&tbs=lrf:!2m1!1e2!2m1!1e3!3sIAE,lf:1,lf_ui:9#lrd=0x80c2caa3a184dc3d:0x50768e4143e597a1,1,,,&rlfi=hd:;si:5797977981249230753;mv:!1m3!1d4716380.17730953!2d-95.05670475!3d37.9292408!2m3!1f0!2f0!3f0!3m2!1i1185!2i281!4f13.1;tbs:lrf:!2m1!1e2!2m1!1e3!3sIAE,lf:1,lf_ui:9';

if (yelpURL) {
  request(yelpURL, function(error, response, html){
    if(!error && response.statusCode == 200){
      var $ = cheerio.load(html);

      var reviews = $('span[class="review-count rating-qualifier"]').first().text();
      var stars = $('img[class="offscreen"]').attr('alt');

      console.log('Number of reviews : ' + reviews);
      console.log('Business Assessment : \n\t    ' + stars + '\n');
    }
  });
}
if(googleURL) {
  request(googleURL, function(error, response, html){
    if(!error && response.statusCode == 200){
      var $ = cheerio.load(html);

      var reviews = $('span[class="_Mnc _yz"]').first().text();
      var stars = $('span[class="rtng"]').first().text();
      //var stars = $('span[class="_pxg _Kxg"]').attr('aria-label');

      console.log('Number of reviews : ' + reviews);
      console.log('Business Assessment : ' + stars);
    }
  });
}

我试图从 _pxg 类的 aria-label 属性中抓取评级,然后从 rtng 类中获取“4.9”,它们只返回未定义或空字符串。至于评论编号,唯一获得它的地方是 _Mnc 类,它总是只返回一个空字符串。我知道 google 已从user_rating_total他们的 Google Places API 中删除,否则我会使用它。我的猜测是谷歌不希望人们轻易地废弃他们的网站,或者我只是对此很陌生并且遗漏了一些东西。

萨沙幸

问题request在于它无法执行 javascript 渲染的数据。尝试改用无头浏览器。梦魇是一个伟大的。您使用 nightmare 实例拨打电话,然后将 html 代码传递给您的cheerio。这是示例:

nightmare
    .viewport(1280, 800)
    .goto(url)

    //do something in the chain to go to your desired page.

   .evaluate(() => document.querySelector('body').outerHTML)
   .then(function (html) {
      cheerio.load(html);
      // do something in cheerio
})
.catch(function (error) {
console.error('Error:', error);
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

html使用cheerio js和node js抓取td元素

来自分类Dev

使用Cheerio Node.js抓取表格数据

来自分类Dev

使用Cheerio Node.js抓取表格数据

来自分类Dev

使用node.js和cheerio抓取OP.GG网站的问题

来自分类Dev

Node.js and Cheerio parsing table with selectors

来自分类Dev

如何将抓取内容放入html(Node.js,Cheerio)

来自分类Dev

用cheerio抓取的Node.js没有返回值

来自分类Dev

具有选择器的Node.js和Cheerio解析表

来自分类Dev

如何使用node.js Cheerio一一获取元素

来自分类Dev

如何使用node.js + cheerio指定xhr请求?

来自分类Dev

使用带有Cheerio的Node.js预处理HTML

来自分类Dev

Cheerio访问脚本标签Node.js中的对象

来自分类Dev

如何使用node.js + cheerio指定xhr请求?

来自分类Dev

Cheerio Node.JS外部标题链接问题

来自分类Dev

Node JS 请求和cheerio HTML 页面错误

来自分类Dev

node.js reqest.js / cheerio.js返回空json

来自分类Dev

Cheerio JS HTML

来自分类Dev

节点js cheerio xml

来自分类Dev

如何测试cheerio js

来自分类Dev

如何使用Cheerio js删除<div>和<br>?

来自分类Dev

我可以在node.js中使用cheerio软件包加载本地html文件吗?

来自分类Dev

使用Cheerio Node.js基于正则表达式模式提取文本

来自分类Dev

使用cheerio 抓取页面

来自分类Dev

NodeJS Cheerio,抓取和获取变量

来自分类Dev

Express和Cheerio / JSDOM

来自分类Dev

Node js抓取失败

来自分类Dev

在使用cheerio js进行网络抓取时获取其他信息

来自分类Dev

用cheerio.js 抓取,得到:错误:只能在暂停时执行操作

来自分类Dev

cheerio选择器(Node.js)在控制台中运行,但不在我的脚本中运行