【发布时间】:2017-08-24 21:29:59
【问题描述】:
我正在尝试从this NCBI.gov page 中抓取 html。我需要包含#see-all URL 片段,这样我才能保证获得搜索页面,而不是从不正确的基因页面https://www.ncbi.nlm.nih.gov/gene/119016 中检索 HTML。
URL 片段不会传递给服务器,而是由页面客户端的 javascript 用于(在这种情况下)创建完全不同的 HTML,这是您在浏览器中访问页面时得到的和“查看页面源代码”,这是我要检索的 HTML。 R readLines() ignores url tags followed by #
我首先尝试使用 phantomJS,但它只是返回了此处描述的错误ReferenceError: Can't find variable: Map,这似乎是由于 phantomJS 不支持 NCBI 正在使用的某些功能,从而消除了解决此问题的途径。
我使用以下用 node.js 评估的 Javascript 在 Puppeteer 上取得了更大的成功:
const puppeteer = require('puppeteer');
(async() => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(
'https://www.ncbi.nlm.nih.gov/gene/?term=AGAP8#see-all');
var HTML = await page.content()
const fs = require('fs');
var ws = fs.createWriteStream(
'TempInterfaceWithChrome.js'
);
ws.write(HTML);
ws.end();
var ws2 = fs.createWriteStream(
'finishedFlag'
);
ws2.end();
browser.close();
})();
然而,这返回了似乎是预渲染的 html。我如何(以编程方式)获取我在浏览器中获得的最终 html?
【问题讨论】:
标签: javascript node.js web-scraping google-chrome-headless puppeteer