iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > GO >无法被html.Parse() 解析的HTML格式
  • 637
分享到

无法被html.Parse() 解析的HTML格式

2024-04-04 23:04:57 637人浏览 八月长安
摘要

小伙伴们有没有觉得学习golang很有意思?有意思就对了!今天就给大家带来《无法被html.Parse() 解析的HTML格式》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文

小伙伴们有没有觉得学习golang很有意思?有意思就对了!今天就给大家带来《无法被html.Parse() 解析的HTML格式》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

问题内容

我正在编写一个 Go 函数来读取 html 响应正文并提取页面标题。总的来说,该函数工作得很好,但我想测试响应正文根本不是正确 html 的代码路径。我为单元测试创​​建一些无效 html 的简单尝试已经失败。

显然,根据 html.parse 文档,这是因为:

HTML5 解析算法 [...] 非常复杂。生成的树可以包含隐式创建的节点,这些节点在 r 的数据中没有列出显式 <tag>,并且节点的父节点可能与起始和结束 <tag>s 的简单处理所隐含的嵌套不同。相反,r 数据中的显式 <tag>s 可以被静默删除,而生成的树中没有相应的节点。

这里有一些代码演示了我一直在采取的方法:

https://play.golang.org/p/t5wjdtjncqq

package main

import (
    "bytes"
    "fmt"
    "golang.org/x/net/html"
)

func main() {
    inputs := []string{ "",
        "~",
        "<",
        "<ht",
        "<html",
        "<html>",
        "<html><",
        "<html><titl",
        "<html><title",
        "<html><title>",
        "<html><title>the c progr",
        "<html><title>the c programming language",
        "<html><title>the c programming language<",
        "<html><title>the c programming language</",
        "<html><title>the c programming language</ti",
        "<html><title>the c programming language</title",
        "<html><title>the c programming language</title>",
        "<html><title>the c programming language</title><",
        "<html><title>the c programming language</title></",
        "<html><title>the c programming language</title></ht",
        "<html><title>the c programming language</title></html",
        "<html><title>the c programming language</title></html>",
    }

    for _, in := range inputs {
        fmt.printf("%s\n", in)

        r := bytes.newreader([]byte(in))
        _, err := html.parse(r)
        if err != nil {
            fmt.printf("could not parse html\n")
            panic(err)
        }
    }
}

愚蠢的我,我本以为其中许多会产生错误,因为从表面上看它们是无效的 html,但上面的代码在没有 panic'ing 的情况下遍历所有输入字符串——也就是说,没有非-来自 html.parse()nil err

我想我很感激一个宽松/宽容的 html 解析器,但是:有没有人有一个在输入 go 的 html.parse() 时会产生错误的文本示例?

编辑 1

结合 ferrybig 和 creationtribe 评论中的想法,我什至尝试了巨大的随机字节流:

rand.Seed(time.Now().UnixNano())

    in := make([]byte, 0)
    for i := 0; i < 2147483647; i++ {
        in = append(in, byte(rand.Intn(255)))
    }
    fmt.Printf("len(in) : %d\n", len(in))

    r := bytes.NewReader(in)
    _, err := html.Parse(r)

...仍然没有错误。

是否没有输入会导致html.parse()出错?


解决方案


快速阅读Https://GitHub.com/golang/net/blob/master/html/token.go,似乎唯一返回的错误可能是:

  • 一旦 r 完全读取成功,io.eof;
  • 底层 io.reader 返回的任何其他错误;或
  • html.errbufferexceeded

在初次读取后如何触发 errbufferexceeded 对我来说并不明显,但您可以通过提供虚拟读取器来触发 html.parse 的错误:

type ErrReader struct { Error error }

func (e *ErrReader) Read([]byte) (int, error) {
    return nil, e.Error
}

https://play.golang.org/p/s78HpfMLAI8

希望有帮助

终于介绍完啦!小伙伴们,这篇关于《无法被html.Parse() 解析的HTML格式》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~编程网公众号也会发布Golang相关知识,快来关注吧!

您可能感兴趣的文档:

--结束END--

本文标题: 无法被html.Parse() 解析的HTML格式

本文链接: https://www.lsjlt.com/news/595930.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 无法被html.Parse() 解析的HTML格式
    小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《无法被html.Parse() 解析的HTML格式》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文...
    99+
    2024-04-04
  • proto:无法解析无效的有线格式数据
    问题内容 我是 protobufs 的新手,目前正在编写一个从 nats 服务器读取数据的客户端。从 nats 服务器发送的数据是 protobuf。 我正在编写的客户端是用 go 编...
    99+
    2024-02-06
  • python对url格式解析的方法
    本文实例讲述了python对url格式解析的方法。分享给大家供大家参考。具体分析如下: python针对url格式的解析,可根据指定的完整URL解析出url地址的各个部分 1 2 3 4 5 6 7 8 9 ...
    99+
    2023-01-31
    格式 方法 python
  • html中预格式化的示例分析
    这篇文章主要介绍html中预格式化的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! <pre>......</pre> 浏览是效果和编写是效果格式一...
    99+
    2024-04-02
  • html格式化的方法有哪些
    html格式化方法:1、使用在线html格式化工具;2、使用代码编辑器自带的html格式化快捷键,如visual studio code中的shift + alt + f;3、使用插件,...
    99+
    2024-03-08
    格式化 html
  • HTML中文本格式化的示例分析
    这篇文章给大家分享的是有关HTML中文本格式化的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。HTML 文本格式化<!DOCTYPE HTML> &...
    99+
    2024-04-02
  • Mac电脑无法将U盘格式化(抹除)为APFS格式的解决
    概览 很多小伙伴把新买的U盘插在Mac上,然后想把它格式化(抹除)为APFS格式。但却只能选择旧的Mac OS 扩展类型格式,压根看不到APFS格式的选项: 如上图所示,在U盘抹除中根本看不到 APFS 格式。 其实解决起来非常容易,...
    99+
    2023-08-16
    macos U盘 格式化 抹除 APFS
  • MongoDB的BSON格式解析方法是什么
    在MongoDB中,BSON是一种二进制的序列化格式,类似于JSON,但更适合用于存储和检索数据。BSON格式的数据可以通过各种编程...
    99+
    2024-05-07
    MongoDB
  • windows无法格式化硬盘怎么解决
    如果Windows无法格式化硬盘,可以尝试以下方法:1. 检查硬盘是否有物理损坏,可以使用硬盘检测工具检测硬盘状态。2. 关闭所有与...
    99+
    2023-06-11
    无法格式化硬盘
  • windows无法格式化u盘如何解决
    如果Windows无法格式化U盘,可能是因为以下几个原因:1. U盘有物理故障:检查U盘是否有损坏或者松动的部件。尝试将U盘插入其他...
    99+
    2023-09-07
    windows
  • windows无法完成格式化如何解决
    这篇文章主要介绍“windows无法完成格式化如何解决”,在日常操作中,相信很多人在windows无法完成格式化如何解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”windows无法完成格式化如何解决”的疑...
    99+
    2023-07-02
  • php无法返回json格式如何解决
    这篇文章主要介绍“php无法返回json格式如何解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“php无法返回json格式如何解决”文章能帮助大家解决问题。php无法返回json格式的解决办法:1...
    99+
    2023-07-05
  • win7无法格式化U盘如何解决
    这篇文章主要介绍了win7无法格式化U盘如何解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇win7无法格式化U盘如何解决文章都会有所收获,下面我们一起来看看吧。第一种:对U盘进行查杀病毒处理:需要对U盘查杀...
    99+
    2023-06-27
  • windows无法格式化u盘的解决办法是什么
    本篇文章给大家分享的是有关windows无法格式化u盘的解决办法是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在日常生活中我们经常需要使用到U盘,不过U盘有时候也会出现问...
    99+
    2023-06-28
  • win7硬盘无法格式化怎么解决
    本篇内容主要讲解“win7硬盘无法格式化怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“win7硬盘无法格式化怎么解决”吧!解决方法:打开计算机,点击点击桌面工具,选择文件夹选项。在窗口中...
    99+
    2023-06-28
  • vscode 无法格式化python代码、无法格式化C++代码(vscode格式化失效)另一种解决办法:用外部工具yapf格式化(yapf工具)
    文章目录 我真的解决方法:用yapfyapf工具使用方法示例格式化单个文件(格式化前先用-d参数预先查看格式化更改内容,以决定是否要更改)格式化某个目录递归格式化某个目录 2023071...
    99+
    2023-09-17
    vscode python c++
  • HTML文本格式化:超越基础,解锁无限可能性
    标题和副标题 使用 <h1> 到 <h6> 标签创建不同级别的标题,从主要标题到小节。 使用 <h3> 和 <h4> 强调重要部分,例如段落或列表。 利用 CSS 自定义标题和副标题的字体...
    99+
    2024-04-02
  • JPAlike模糊查询语法格式解析
    目录JPA like 模糊查询 语法格式模糊查询:Spring Data JPA 如何进行模糊查询(LIKE) ?一. 方法一二. 方法二JPA like 模糊查询 语法格式...
    99+
    2024-04-02
  • 【Java-时间格式解析】Java解析形如 yyyy-MM-ddTHH:mm:ssZ 的时间格式
    【Java-时间格式解析】Java解析形如 yyyy-MM-ddTHH:mm:ssZ 的时间格式 1)yyyy-MM-ddTHH:mm:ss.SSSZ 时间格式解释2)使用Java 对 yyyy-MM-ddTHH:mm:ss.SSS...
    99+
    2023-08-19
    java 开发语言
  • u盘显示0字节无法格式化的解决方法
    小编给大家分享一下u盘显示0字节无法格式化的解决方法,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!u盘0字节无法格式化下载并打开U盘量产工具将U盘插入,在弹出的窗口中,选择默认选项专案点击【设置】,将模式选为重新生产然后点...
    99+
    2023-06-27
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作