【问题标题】:Scraping Company Names using Node.js and Cheerio使用 Node.js 和 Cheerio 抓取公司名称
【发布时间】:2018-11-11 00:39:33
【问题描述】:

网址 = http://www.simon.com/mall/anchorage-5th-avenue-mall/stores

上面的网址列出了特定商场中的所有商店。我想要做的是从该链接中抓取该链接以获取该商场中所有商店的列表。这是我到目前为止的代码

request(url, function(err, resp, body) {
    if (err) {
        console.log(err);
    } else {

        var $ = cheerio.load(body);

        $('h2.card-secondary-title.name.copy').each(function() {
            var text = $(this).text();
            console.log(text);
        });
    }
})

此格式的网页在哪里

    <html>
      <head>
        <main id="simon" class>
          <section class="directory">
            <div id="root">
              ...
               <div class="directory-grid row">
                 ...
                   <h2 class="card-secondary-title name copy">5th Avenue Deli</h2>

我什至无法从网站上抓取任何一家商店。使用这种方法,我已经能够从许多其他网站上刮下来,但由于某种原因,这个无法正常工作

【问题讨论】:

  • 可能是因为在您获得第一个答案后加载商店列表需要一些时间(它已加载 ajax),因此您可能需要在迭代之前检查特定组件...跨度>

标签: javascript html node.js web-scraping cheerio


【解决方案1】:

您尝试抓取的内容是通过 ajax 加载的,您将无法使用cheerio 检索它。

您可以直接复制 ajax 请求,以 JSON 格式检索信息。您正在查找的数据来自此请求:

https://api.simon.com/v1.2/tenant?lw=true&amp;mallId=231

其中包含以下内容:

[
  {
    "brandId": 48,
    "name": "5th Avenue Deli",  // This is the value you want
    /** ... */
    ]
  },
  /* ... */
]

我对 javascript 很陌生,所以我不知道你的意思是什么 说我应该直接复制ajax请求。你能解释一下吗 更详细一点?

复制 Ajax 调用的一种简单方法是检查 chrome 开发人员工具 (F12) 上的请求

那就去network tab > XHR filter > locate the request > right click > copy > copy as cURL

然后从 curl 到您想在服务器端使用的任何库,转换非常容易。

【讨论】:

  • 我对 javascript 很陌生,所以当你说我应该直接复制 ajax 请求时,我不知道你的意思。能详细解释一下吗?
  • 谢谢,这行得通!我会给你一个赞成票,但我没有足够的声誉哈哈
猜你喜欢
  • 2019-07-29
  • 2021-08-02
  • 2014-02-26
  • 2021-04-08
  • 1970-01-01
  • 1970-01-01
  • 2016-05-20
  • 2021-05-28
  • 2014-05-21
相关资源
最近更新 更多