确定使用 BeautifulSoup4 获取 input 的 value 值
今天接到一个解析网页内容的需求,要我从网页里找出订单号。
和往常一样,我不管现在流行什么,只是习惯性的首选了前些年最多人用的BeautifulSoup4。
扫了一眼要解析的网页代码,发现挺简单的,我只需要通过其中一个input标签的id去取它对应的value值就可以了。
流程很简单,导入包,加载要解析的HTML代码,拿出结果
自信的输入代码,结果:翻车!
发现好久没有更新BeautifulSoup4的文件了。
成功更新后,马上啪啪一顿码代码:
# 导入BeautifulSoup4的包
from bs4 import BeautifulSoup
# 放入要解析的HTML代码,可以看到,只需要取 id 为 order_id 的 value 就可以了
html_source = "<input type=\"hidden\" id=\"order_id\" value=\"2021-05-15-1234\" />"
# 开始解析代码
html_soup = BeautifulSoup(html_source, "html.parser")
# 查找 id 为 order_id 的 input 标签,获取其 value 属性的值,将其保存到变量 order_value 中
order_value = html_soup.find('input', id = 'order_id')["value"]
# 输出
print(order_value)
执行后提示:
TypeError: 'NoneType' object is not subscriptable
出现错误的时候一愣,怎么以前好好的,现在不行了?
翻查了一下官网文档,又看了看本地的BeautifulSoup4版本,发现原来是更新了写法。
通过官方文档得知,要把取值的代码改掉。
原先的取值方法
order_value = html_soup.find('input', id = 'order_id')["value"]
修改为
order_value = html_soup.find('input', attrs={'id':'order_id'})['value']
最新的正确写法是这样
截止到现在最新的BeautifulSoup4 4.9.3,正确完整的写法,应该为:
# 导入BeautifulSoup4的包
from bs4 import BeautifulSoup
# 放入要解析的HTML代码,可以看到,只需要取 id 为 order_id 的 value 就可以了
html_source = "<input type=\"hidden\" id=\"order_id\" value=\"2021-05-15-1234\" />"
# 开始解析代码
html_soup = BeautifulSoup(html_source, "html.parser")
# 查找 id 为 order_id 的 input 标签,获取其 value 属性的值,将其保存到变量 order_value 中
order_value = html_soup.find('input', attrs={'id':'order_id'})['value']
# 输出
print(order_value)
后记
避免翻车,不轻易升级类库。还是得偶尔翻看官方文档,同步自己的知识库。
以上的阐述只对有基础的朋友有作用,如果对以上的知识点有质疑或者不懂的可以在下方留言。

本文介绍了在Python中使用BeautifulSoup4库解析HTML时,如何正确获取input标签的value值。作者在更新库后遇到问题,经过查阅文档发现取值方法有所改变,并分享了最新的正确写法。

935

被折叠的 条评论
为什么被折叠?



