gpt4 book ai didi

javascript - 如何从 URL 正文获取内部文本

转载 作者:太空宇宙 更新时间:2023-11-04 03:22:46 25 4
gpt4 key购买 nike

我正在尝试在nodejs应用程序中获取https://www.example.com/的innerText。我尝试使用 request npm 模块来获取 URL 正文,如下所示:

function getBodyText() {
request({
url:'https://www.example.com/'
}, (error, response, body) => {
console.log(body.innerText);
});
}

上面的代码显示了我所在的当前页面的正文(https:www.google.com)。我错过了什么吗?

最佳答案

在上面的代码中,body 值只是一个字符串。另一方面,innerText 假设 body 是一个 DOM Node .

在 Node 中,DOM 并不像在浏览器中那样存在,因此为了访问返回的 DOM Node ,您需要使用包 Cheerio 加载 body 。您可以分配请求选项的 transform 属性,以使用 cheerio.load() 将正文加载到 DOM 中。然后就可以使用传统的 DOM 选择器来遍历 body

为了使用the transform option在请求选项对象上,您需要从 request 切换到 request-promise。 (npm i --save request request-promise)它们的功能几乎相同,只是 request-promise 将使用 Bluebird 返回 A+ Promise,其中 request 使用更传统的错误优先回调。

由于 Cheerio 使用自己的 jQuery 实现,您可以引用他们的 docs与返回的 DOM 交互时的差异。

const cheerio = require('cheerio')
const request = require('request-promise')

request({
method: 'GET',
uri: 'https://google.com'
transform: body => cheerio.load(body)
})
.then($ => {
console.log($('p').text)
})

如果您不想切换到request-promise,您仍然可以执行此操作并使其使用 Promises

const cheerio = require('cheerio')
const request = require('request')

const getDOMFromURI = uri => {
return new Promise((resolve, reject) => {
request(uri, (err, res, body) => {
if (err) {
return reject(err)
}

return resolve(cheerio.load(body))
})
})
}

getDOMFromURI('https://google.com').then($ => {
console.log($('p').text)
})

关于javascript - 如何从 URL 正文获取内部文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48347439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com