用于 BigQuery UDF 的纯 javascript HTML 解析器

Posted

技术标签:

【中文标题】用于 BigQuery UDF 的纯 javascript HTML 解析器【英文标题】:Pure javascript HTML parser for use in a BigQuery UDF 【发布时间】:2020-04-25 16:00:00 【问题描述】:

我正在寻找一个纯 javascript 不依赖于浏览器的 html 解析器。如果它支持通过 XPATH 或 CSS 选择器查找元素,则会得到奖励。我想在 BigQuery UDF 中使用它,这样我就可以处理数据中的 HTML 字段,但问题是许多这些库(可以理解)调用浏览器 API 来完成繁重的工作。对于 BQ UDF,没有浏览器。我需要这一切都发生在 JS 中。

【问题讨论】:

看这里:johnresig.com/blog/pure-javascript-html-parser 【参考方案1】:

在查看了@GUNNM 的建议后,我使用该库相当轻松地完成了一些工作:

CREATE TEMP FUNCTION parseHTML(html STRING)
      RETURNS STRING
      LANGUAGE js
      OPTIONS (
        library=["gs://my-bq-udf/htmlparser.js"]
      )
      AS
    """
    captions = []
    elementSelected = false
    HTMLParser(html, 
      start: function( tag, attrs, unary ) 
        if (tag == "div") 
          for (var i = 0; i < attrs.length; i++) 
             if (attrs[i].name == "class" && attrs[i].value.indexOf("caption") > -1) 
                elementSelected = true
                return
             
          
        
      ,
      end: function( tag )  
        elementSelected = false
      ,
      chars: function( text )   
        if (elementSelected) 
          captions.push(text)
        
      ,
      comment: function( text )   
    );
    return captions.join("|")
"""

这是一个简化的示例,但它展示了如何将其加载为外部 UDF,并使用回调、访问和结构化 HTML 的不同部分。我正在使用 class== "caption" 构建一个 div 数组。

谢谢!

【讨论】:

以上是关于用于 BigQuery UDF 的纯 javascript HTML 解析器的主要内容,如果未能解决你的问题,请参考以下文章

用于合并值列表/数组的 BigQuery JavaScript UDF

在 BigQuery 的查询中使用 UDF 作为列

使用 JavaScript BigQuery UDF 解密/解码 AES256 [重复]

BigQuery 隐藏 UDF 实现

UDF 上的 Bigquery 配额限制

BigQuery -- 在公开共享项目中使用 UDF 的问题