由于我是Node的新手,因此我尝试使用node以JSON格式获取网站搜索结果,并且尝试使用http chunk方法并表达get方法,但是找不到它。 网址:https://www.cyccomputer.pe/buscar?search_query=mouse
答案 0 :(得分:2)
URL https://www.cyccomputer.pe/buscar?search_query=mouse
不返回json
。所有者呈现html
页面,并且不提供json。
您可以通过抓取来实现您的尝试。您可以使用request
,request-promise
,axios
等包来获取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>
...
然后,您可以使用html2json
,html-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来记录整个对象`