使用NodeJs以JSON格式获取网站的搜索结果

时间:2019-04-05 20:56:23

标签: javascript node.js express request

由于我是Node的新手,因此我尝试使用node以JSON格式获取网站搜索结果,并且尝试使用http chunk方法并表达get方法,但是找不到它。 网址:https://www.cyccomputer.pe/buscar?search_query=mouse

1 个答案:

答案 0 :(得分:2)

URL https://www.cyccomputer.pe/buscar?search_query=mouse不返回json。所有者呈现html页面,并且提供json。

您可以通过抓取来实现您的尝试。您可以使用requestrequest-promiseaxios等包来获取html,如:

const rp = require('request-promise')

rp('https://www.cyccomputer.pe/buscar?search_query=mouse')
  .then(html => console.log(html) // html contains the returned html)

// outputs something like:
<!DOCTYPE HTML>
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="es-es"><![endif]-->
<!--[if IE 7]><html class="no-js lt-ie9 lt-ie8 ie7" lang="es-es"><![endif]-->
<!--[if IE 8]><html class="no-js lt-ie9 ie8" lang="es-es"><![endif]-->
<!--[if gt IE 8]> <html class="no-js ie9" lang="es-es"><![endif]-->
<html lang="es-es">
    <head>
...

然后,您可以使用html2jsonhtml-to-json等程序包将html解析为json,例如:

const html2json = require('html2json').html2json;

rp('https://www.cyccomputer.pe/buscar?search_query=mouse')
  .then((html) => {
    const jsonData = html2json(html);
    console.log(jsonData)
  })

// sample from docs
// html to parse
<div id="1" class="foo">
<h2>sample text with <code>inline tag</code></h2>
<pre id="demo" class="foo bar">foo</pre>
<pre id="output" class="goo">goo</pre>
<input id="execute" type="button" value="execute"/>
</div>

// outputs
{
  node: 'root',
  child: [
    {
      node: 'element',
      tag: 'div',
      attr: { id: '1', class: 'foo' },
      child: [
        {
          node: 'element',
          tag: 'h2',
          child: [
            { node: 'text', text: 'sample text with ' },
            { node: 'element', tag: 'code', child: [{ node: 'text', text: 'inline tag' }] }
          ]
        },
...

更新 :(针对OP的问题)

您可能还希望使用cheerio包来获取html的body并将其解析为json,例如:

const cheerio = require('cheerio');

rp('https://www.cyccomputer.pe/buscar?search_query=mouse')
  .then(html => {
    var data = cheerio.load(html);
    var body = data('body').html();
    var result = html2json(body);
    console.log(result);
  })
  .catch(e => console.log('error', e.message))

注意:如果您只是控制台日志记录,则depth有一个限制。签出这个SO Question来记录整个对象`