【问题标题】:Is it possible to scrape a React website (Instagram) with Cheerio?是否可以使用 Cheerio 抓取 React 网站(Instagram)?
【发布时间】:2015-06-24 12:09:04
【问题描述】:

我正在尝试使用 Node.js / Cheerio 抓取 Instagram(使用 React 构建)。调试文档会显示返回的对象,但它看起来不像典型的响应。

我猜这与 React 有关。有没有办法解决这个问题,并拉出渲染的 DOM 来用 Cheerio 解析?还是我完全错过了什么?

【问题讨论】:

  • 没有代码,没有确切的错误信息,没有确切的重现步骤,我猜你错过了how-to-ask。当然,使用您的键盘和调试器,您甚至可以使用ReactCheerio 抓取使用React 构建的网站。但是您可能需要一些更强大的工具,例如 PhantomJSSeleniumHQ 能够运行脚本、等待它们执行等。
  • 这是一个带有二元答案的概念性问题——感谢您的无益。
  • 亲爱的@Kyle,乐于助人是基于意见的。我相信你的问题还不够好,你可以改进它。我在您的问题中看不到“概念”。二进制答案是肯定的,这是可能的。但是,调试文档的确切含义是什么?什么文件?错误信息是什么? jsFiddle 重现?
  • 很公平。我已经在下面发布了答案。代码如下,减去用户代理。不幸的是,没有 jsFiddle,因为这是服务器端代码,也没有错误消息,因为返回了响应,只是不是 Cheerio 可解析的(React 创建了一个虚拟 DOM)。

标签: node.js web-scraping reactjs cheerio


【解决方案1】:

在一般情况下——如果网站是 SEO 友好的,你可以通过欺骗网络爬虫的用户代理字符串来做到这一点。这会返回一个可以被 Cheerio 解析的渲染 DOM。

在特定情况下——Instagram 在其移动网站上返回一个渲染的 DOM。欺骗手机的用户代理字符串,可以解析返回的数据。

      var options = {
        url: user.instagram_url,
        headers: {
          'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.3 (KHTML, like Gecko) Version/8.0 Mobile/12A4345d Safari/600.1.4'
        }
      };

      request(options, function(error, response, html) {
        if (!error) {

          console.log('Scraper running on Instagram user page.');

          // Use Cheerio to load the page.
          var $ = cheerio.load(html);

          // Code to parse the DOM here

        }
      }

【讨论】:

  • 您能解释一下“在移动网站上呈现的虚拟 DOM 无法被 Cheerio 解析”吗? unspoofed 查询返回的一些“另见”超链接或一些html sn-p 示例?让其他人能够理解您发现并解决了什么样的问题?我知道什么是 instagram、node.js、cheerio、html、css、javascript、文档对象模型、搜索引擎优化和其他东西,但我仍然觉得很难想象你在看电脑屏幕时看到了什么......
  • @Kyle:我找不到可以在我的桌面上为 Instagram 打开的移动网站。有的话请给个链接。谢谢。
  • 您必须更改您的用户代理字符串。您可以使用 Chrome 浏览器仿真或在 Cheerio 选项中执行此操作,就像我在上面所做的那样。
  • @KyleChadha 感谢您发布此信息。无论您是否使用过搜索引擎/移动 UA,当网站返回相同的 React 字符串时,您是否曾设法进一步采用此概念?
  • @KyleChadha 实际上,刚刚发现:stackoverflow.com/questions/29972996/how-to-parse-dom-react
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-20
  • 1970-01-01
  • 2016-05-20
  • 2010-11-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多