使用PhantomJS提取html和文本

Use PhantomJS to extract html and text

本文关键字:文本 html 提取 PhantomJS 使用      更新时间:2023-09-26

我试图提取页面的所有文本内容(因为它不适用于Simpledomparser)

我试图从手动中修改这个简单的例子

var page = require('webpage').create();
console.log('The default user agent is ' + page.settings.userAgent);
page.settings.userAgent = 'SpecialAgent';
page.open('http://www.httpuseragent.org', function (status) {
    if (status !== 'success') {
        console.log('Unable to access network');
    } else {
        var ua = page.evaluate(function () {
            return document.getElementById('myagent').textContent;
        });
        console.log(ua);
    }
    phantom.exit();
});

我尝试更改

return document.getElementById('myagent').textContent;

return document.textContent;

这行不通。

做这件简单的事的正确方法是什么?

这个版本的脚本应该返回页面的全部内容:

var page = require('webpage').create();
page.settings.userAgent = 'SpecialAgent';
page.open('http://www.httpuseragent.org', function (status) {
    if (status !== 'success') {
        console.log('Unable to access network');
    } else {
        var ua = page.evaluate(function () {
            return document.getElementsByTagName('html')[0].outerHTML;
        });
        console.log(ua);
    }
    phantom.exit();
});

有多种方法可以将页面内容检索为字符串:

  • page.content给出了完整的源,包括标记(<html>)和doctype(<!DOCTYPE html>),

  • document.documentElement.outerHTML(通过page.evaluate)提供了完整的源,包括标记(<html>),但没有doctype,

  • CCD_ 7(经由CCD_;JavaScript,但没有标记,

  • CCD_ 9(经由CCD_;JavaScript并且没有标记。

document.documentElement可以通过您选择的元素或查询进行交换。

要提取页面的文本内容,您可以尝试此return document.body.textContent;,但我不确定结果是否可用。

在试图解决类似问题时遇到了这个问题,我最终根据这个问题调整了一个解决方案,如下所示:

var fs = require('fs');
var file_h = fs.open('header.html', 'r');
var line = file_h.readLine();
var header = "";
while(!file_h.atEnd()) {
    line = file_h.readLine(); 
    header += line;
}
console.log(header);
file_h.close();
phantom.exit();

这为我提供了一个包含读入HTML文件的字符串,这对我的目的来说已经足够了,希望能帮助其他遇到这种情况的人。

这个问题似乎很模糊(是所需文件的全部内容,还是仅仅是"文本",也就是字符串?)所以这是一个可能的解决方案。