【发布时间】:2018-08-26 07:36:07
【问题描述】:
我正在使用 node.js 和 puppeteer 来获取一些数据。 ...但是数据是在没有行 td 等元素的情况下呈现的。如果我复制目标的外部 html,我会得到这样的结果:
<pre>
<strong>Date Filed File ID Code Company Name</strong>
<hr>
08-24-2018 <a href="/117-index.html">ABC/A</a> <a href="url;id=777">777</a> Company A
08-24-2018 <a href="/007-index.html">ABC/A</a> <a href="url;id=612">612</a> Company B
08-24-2018 <a href="/750-index.html">ABC/A</a> <a href="url;id=619">619</a> Company C
<hr>
</pre>
如何从这 4 列中获取数据(第 1 列:归档日期,第 2 列:文件,第 3 列:ID 代码和第 4 列:公司名称)?
我查看了开发工具,我看到它是这样的
<pre>
<strong>Date Filed File ID Code Company Name</strong>
<hr>
08-24-2018
<a href="/117-index.html">ABC/A</a>
<a href="url;id=777">777</a>
Company A 08-24-2018
<a href="/007-index.html">ABC/A</a>
<a href="url;id=612">612</a>
Company B 08-24-2018
<a href="/750-index.html">ABC/A</a>
<a href="url;id=619">619</a>
Company C
<hr>
</pre>
...当我点击它时,它就像:
<pre>
<strong>Date Filed File ID Code Company Name</strong>
<hr>
08-24-2018
<a href="/117-index.html">ABC/A</a>
<a href="url;id=777">777</a>
Company A
08-24-2018
<a href="/007-index.html">ABC/A</a>
<a href="url;id=612">612</a>
Company B
08-24-2018
<a href="/750-index.html">ABC/A</a>
<a href="url;id=619">619</a>
Company C
<hr>
</pre>
当我控制链接数时,我得到 6 .... app.js
const puppeteer = require('puppeteer');
const fs = require('fs-extra');
(async function main() {
try {
const browser = await puppeteer.launch({ headless: false })
const page = await browser.newPage();
await page.goto('url', {waitUntil: 'load'});
const table = await page.waitForSelector('body table');
const rows = await page.$$('body table pre a');
console.log(rows.length);
...
} catch (e) {
console.log('our error', e);
}
})();
但是我怎样才能正确地获取这些数据呢?
编辑:OuterHTML
const pre = await page.$('body table pre');
const preVal = await page.evaluate( pre => pre.outerHTML, pre );
console.log(preVal);
<pre><strong>Date Filed File ID Code Company Name</strong><hr>08-24-2018 <a href="/117-index.html">ABC</a> <a href="url;id=777">777</a> Company A
08-24-2018 <a href="/007-index.html">ABC</a> <a href="url;id=612">612</a> Company B
08-24-2018 <a href="/750-index.html">ABC</a> <a href="url;id=619">619</a> Company C
<hr></pre>
【问题讨论】:
-
你想摆脱那些 nbsp 的东西吗?
-
是的...但主要也是获取字段Column1:Date Filed,Column 2:File,Column 3:ID Code和Column 4:Company Name的数据。由于它们不像往常那样在表中 tr td 我不知道如何获取它们......你知道吗?
-
可以添加
page.evaluate(()=>document.querySelector('body table pre').outerHTML)的输出 -
是的。请参阅上面的编辑