Python利用BeautifulSoup4库获取input标签的value值

Posted 家铭didphp

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python利用BeautifulSoup4库获取input标签的value值相关的知识,希望对你有一定的参考价值。

确定使用 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库获取input标签的value值的主要内容,如果未能解决你的问题,请参考以下文章

Python网络爬虫——BeautifulSoup4库的使用

Python3 利用pip安装BeautifulSoup4模块

Python:requests库BeautifulSoup4库的基本使用(实现简单的网络爬虫)

python3解析库BeautifulSoup4

python模块--BeautifulSoup4 和 lxml

如何使用python和beautifulsoup4循环抓取网站中多个页面的数据