Node.js puppeteer - 从具有不同 ElementTag 的 txt 文件中获取数据

菲利普·M

我正在使用 node.js 和 puppeteer 来遍历一堆 txt 文件以获取一些值:

txt 文件(正在获取)

<ABC-DOCUMENT>520.txt
<DOCUMENT>
<TYPE>INFORMATION TABLE
<SEQUENCE>2
<FILENAME>infotable.xml
<TEXT>
<XML>
<?xml version="1.0" ?>
<informationTable xsi:schemaLocation="/document/thirteenf/informationtable" xmlns="/document/thirteenf/informationtable" xmlns:n1="/document/thirteenf/informationtable" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <infoTable>
    <valueA>Company A</valueA>
    <valueB>INC</valueB>
    <shParent>
        <valueC>123</valueC>
        <valueD>AB</valueD>
    </shParent>
    </infoTable>
    <infoTable>
    <valueA>Company B</valueA>
    <valueB>LTD</valueB>
    <shParent>
        <valueC>567</valueC>
        <valueD>ST</valueD>
    </shParent>
  </infoTable>
</informationTable>
</XML>
</TEXT>
</DOCUMENT>
</ABC-DOCUMENT> 

我使用以下查询(发布:Node.js puppeteer - Fetching content from a complex txt file)来遍历文件:

我的脚本:

const example = await page.evaluate( () =>
{
    const page = document.createElement( 'html' );
    const page_content = document.body.textContent;

    page.innerHTML = page_content;

    return {
        'valueA' : Array.from( page.getElementsByTagName( 'valueA' ), e => e.textContent ),
        'valueB' : Array.from( page.getElementsByTagName( 'valueB' ), e => e.textContent ),
        'valueC' : Array.from( page.getElementsByTagName( 'valueC' ), e => e.textContent ),
        'valueD' : Array.from( page.getElementsByTagName( 'valueD' ), e => e.textContent )
    };
});

console.log( example.valueA[0] ); // Company A
console.log( example.valueA[1] ); // Company B

console.log( example.valueB[0] ); // INC
console.log( example.valueB[1] ); // LTD

console.log( example.valueC[0] ); // 123
console.log( example.valueC[1] ); // 567

console.log( example.valueD[0] ); // AB
console.log( example.valueD[1] ); // ST

一些文件在开头有 ns1: :

txt 文件(目前被跳过):

<ABC-DOCUMENT>006.txt
<DOCUMENT>
<TEXT>
<XML>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns1:informationTable xmlns:ns1="/document/thirteenf/informationtable">
  <ns1:infoTable>
    <ns1:valueA>Company D</ns1:valueA>
    <ns1:valueB>INC</ns1:valueB>
    <ns1:shParent>
        <ns1:valueC>567</ns1:valueC>
        <ns1:valueD>AB</ns1:valueD>
    </ns1:shParent>
  </ns1:infoTable>
  <ns1:infoTable>
    <ns1:valueA>Company F</ns1:valueA>
    <ns1:valueB>Corp</ns1:valueB>
    <ns1:shParent>
        <ns1:valueC>692</ns1:valueC>
        <ns1:valueD>Ave</ns1:valueD>
    </ns1:shParent> 
  </ns1:infoTable>    
</ns1:informationTable>
</XML>
</TEXT>
</DOCUMENT>
</ABC-DOCUMENT>

因此,目前正在跳过所有这些文件。我怎样才能读取这些文件并获取值?

格兰特·米勒

您可以使用该filter()方法来帮助选择适当的元素,然后您可以使用该map()方法将其提取textContent回您的原始数组:

const example = await page.evaluate( () =>
{
    const page = document.createElement( 'html' );
    const page_content = document.body.textContent;

    page.innerHTML = page_content;

    const all_elements = Array.from( page.querySelectorAll( '*' ) );

    return {
        'valueA' : all_elements.filter( e => e.tagName.endsWith( 'VALUEA' ) ).map( e => e.textContent ),
        'valueB' : all_elements.filter( e => e.tagName.endsWith( 'VALUEB' ) ).map( e => e.textContent ),
        'valueC' : all_elements.filter( e => e.tagName.endsWith( 'VALUEC' ) ).map( e => e.textContent ),
        'valueD' : all_elements.filter( e => e.tagName.endsWith( 'VALUED' ) ).map( e => e.textContent )
    };
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Node.js puppeteer-从复杂的txt文件中获取内容

Node.js puppeteer - 获取没有元素的数据

在node.js中实现Puppeteer

没有从 node.js 中的 .env 文件获取数据

Node.js:获取具有不同结构的app.js中的服务器变量

从 .txt 文件中获取数据到 .js 文件中

Node.js puppeteer - 转换获取的 href 字符串

Node.js Puppeteer如何获取TR ID值?

Docker上的Node.js + Puppeteer,没有可用的沙箱

无法使用node.js / puppeteer上传图像文件

Node.js puppeteer mysql-使用mysql将获取的值插入到循环内的数据库中

在node.js中合并具有不同格式的多个对象

如何使用Node js中的puppeteer滚动页面5分钟(如果之前没有完成,则滚动时间更短)?

Node.js puppeteer-如何仅从表中获取某些(过滤器)记录

txt文件中的Node.js console.log()

node.js从.txt文件中删除一行

Java读取列文件中具有不同编号的txt并将数据存储在arraylist中

使用puppeteer将网络抓取的数据上传到node.js中的Firebase云存储

从Node.js中的Firebase获取具有最大属性的数据

HTML无法进入Node js puppeteer

Node.js,puppeteer和延迟加载

Node js 加速 puppeteer html 到 pdf

Scilab:如何读取具有不同列数的 txt 文件

具有Node,Express和Puppeteer的Polymer入门套件

Node.js puppeteer - 下载/访问 xml 文件并处理内容

如何停止Puppeteer中的所有JS脚本

从具有不同列数的txt文件中读取数据并将其保存为数据框

在 Puppeteer 中截取具有特定名称的不同元素的屏幕截图

Node.js将一行写入.txt文件