nodejs fetch不返回url数据



我试图获得url返回的json。但是对于这个调用,它返回一个没有数据的响应和状态200

的url: https://www.instagram.com/explore/tags/jeep/?a=1

代码:

const express = require("express");
const fetch = require("node-fetch")
const router = express.Router();
const response = await fetch('https://www.instagram.com/explore/tags/jeep/?__a=1');
const data = await response;
console.log(data)
module.exports = router;

控制台显示的内容:

Response {
size: 0,
timeout: 0,
[Symbol(Body internals)]: {
body: Gunzip {
_writeState: [Uint32Array],
_readableState: [ReadableState],
_events: [Object: null prototype],
_eventsCount: 5,
_maxListeners: undefined,
_writableState: [WritableState],
allowHalfOpen: true,
bytesWritten: 0,
_handle: [Zlib],
_outBuffer: <Buffer 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 01 e2 33 19 87 00 00 00 40 00 00 00 00 00 00 00 41 e2 33 19 87 00 00 00 40 00 00 00 00 00 00 00 81 e2 ... 16334 more bytes>,
_outOffset: 0,
_chunkSize: 16384,
_defaultFlushFlag: 2,
_finishFlushFlag: 2,
_defaultFullFlushFlag: 3,
_info: undefined,
_maxOutputLength: 4294967296,
_level: -1,
_strategy: 0,
[Symbol(kCapture)]: false,
[Symbol(kCallback)]: null,
[Symbol(kError)]: null
},
disturbed: false,
error: null
},
[Symbol(Response internals)]: {
url: 'https://www.instagram.com/accounts/login/?next=/explore/tags/jeep/',
status: 200,
statusText: 'OK',
headers: Headers { [Symbol(map)]: [Object: null prototype] },
counter: 1
}
}

如何获得所有标签数据的正常json ?

假设您正在尝试获得application/json的响应,然后从此更改:

const data = await response;

:

const data = await response.json();

但是,您显示的特定请求返回HTML而不是JSON所以无论如何你都不能把HTML解析成JSON。

你可以用:

获取HTML本身
const data = await response.text();

但是,这只会给你一个HTML页面,为了做一些有用的事情,你必须对它进行解析。

你必须后退几步,重新思考你要做什么,以及如何获得数据。您可以使用像Cheerio或Puppeteer这样的HTML引擎来为您解析HTML。

最新更新