Python BeautifulSoup库 致命错误!!!

Python BeautifulSoup库 致命错误!!!

不多BB,今天工作需要看了下python的 BeautifulSoup库。大致功能是想读取一个html文件。并修改其中的一些内容。方式也很简单。大致伪代码:

with open("test.html", encoding="utf-8") as f:
    html_str = f.read()
html_soup = BeautifulSoup(html_str, "html.parser")

html_soup.body.div.decompose()
html_soup.body.img.decompose()
ret = html.tostring(html.fromstring(html_soup.prettify()))
with open(out_file,mode='wb+') as f:
    f.write(ret)
print(f"处理完毕,输出文件为{out_file}")

读取指定文件,将需要修改的组件删除或者修改。最后在格式化输出。到指定的文件中。

其中最最致命的bug出来了。他会把html文件开头的“<!DOCTYPE html>”字符忽略掉。导致正常的浏览器解析会出问题。至于DOCTYPE未声明会导致出现的问题是什么。可以去百度下。其大致的作用是:

声明文档的解析类型(document.compatMode),避免浏览器的怪异模式。
document.compatMode:
BackCompat:怪异模式,浏览器使用自己的怪异模式解析渲染页面。
CSS1Compat:标准模式,浏览器使用W3C的标准解析渲染页面。
这个属性会被浏览器识别并使用,但是如果你的页面没有DOCTYPE的声明,那么compatMode默认就是BackCompat,

这也就是恶魔的开始 – 浏览器按照自己的方式解析渲染页面,那么,在不同的浏览器就会显示不同的样式。
如果你的页面添加了那么,那么就等同于开启了标准模式,那么浏览器就得老老实实的按照W3C的
标准解析渲染页面,这样一来,你的页面在所有的浏览器里显示的就都是一个样子了。
这就是<!DOCTYPE html>的作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值