使用 Node.js 和 Cheerio 抓取公司名称

Posted

技术标签:

【中文标题】使用 Node.js 和 Cheerio 抓取公司名称【英文标题】:Scraping Company Names using Node.js and 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),因此您可能需要在迭代之前检查特定组件...跨度> 【参考方案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 请求时,我不知道你的意思。能详细解释一下吗? 谢谢,这行得通!我会给你一个赞成票,但我没有足够的声誉哈哈

以上是关于使用 Node.js 和 Cheerio 抓取公司名称的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 node.js 抓取具有动态内容的页面?

node.js 使用 superagent 与 cheerio 完成简单爬虫

在 Node.Js 中使用请求抓取 javascript 生成的内容

在 Node.Js 中使用请求抓取 javascript 生成的内容

Node.js抓取新浪新闻标题

jQuery 访问站点中的 DOM