2 回答
TA贡献1847条经验 获得超11个赞
好的,所以我遇到了这个名为cheerio的包,它基本上允许在服务器上使用jQuery。有了来自该特定 URL 的 html 代码,我可以在该表中搜索我需要的元素。Cheerio 非常简单,通过这段代码,我得到了我需要的结果:
var cheerio = require('cheerio');
request(
'https://authors.aps.org/Submissions/status?utf8=%E2%9C%93&accode=CH10674&author=Poenaru&commit=Submit',
(error, res, html) => {
if (!error && res.statusCode === 200) {
const $ = cheerio.load(html);
const details = $('.details');
const articleInfo = details.find('th').eq(0);
const articleStatus = details
.find('th')
.next()
.eq(0);
//console.log(details.html());
console.log(articleInfo.html());
console.log(articleStatus.html());
}
}
);
干杯!
TA贡献1829条经验 获得超9个赞
您的任务称为“抓取”。您想从某个并非您创建的网页中抓取特定的数据块,然后将其作为您自己网页的一部分返回。
您已经注意到抓取的一个问题:通常您抓取的页面没有使用独特的id. 所以你必须使用一些猜测来找到它。@AvcS 指出了一个名为jsdom的服务器端 npm 库,您可以用于此目的。
请注意:尽管浏览器和 nodejs 都使用 Javascript,但它们仍然是非常不同的环境。浏览器 Javascript 有许多内置 API 来访问网页的文档对象模型 (DOM)。但是 nodejs 没有这些 API。如果您尝试将 jQuery 加载到 node.js 中,它将无法工作,因为它依赖于浏览器 DOM API。jsdom 包为您提供了其中一些 DOM API。
一旦您获取了要抓取的网页,这样的代码可能会帮助您获得所需的内容。
const jsdom = require("jsdom");
const { JSDOM } = jsdom;
...
const page = new JSDOM(page_in_text_string).window;
然后,您可以使用 DOM API 的子集来查找页面中所需的元素。在您的示例中,您正在寻找带有选择器的元素div.class table.group。您正在寻找div.class元素。
你可以做这样的事情来找到你需要的东西:
const desiredTbl = page.document.querySelector("div.class table.group");
const desiredDiv = desiredTbl ? desiredTbl.parentNode : null;
const result = desiredDiv ? desiredDiv.textContent : null;
最后这样做:
page.close();
您的问题说您需要文档中的某些行。HTML 文档没有行,它们有元素。如果您只想提取元素的一部分(表格的一部分而不是整个内容),则需要使用一些文本字符串代码。只是在说'
此外,我还没有调试任何这些。那是留给你的。
有一个更小更快的库可以做类似的事情,称为node-html-parser。如果性能很重要,您可能想要那个。
添加回答
举报