如何使用Python获取隐藏输入的值?

10

如何从HTML页面获取输入值

例如

<input type="hidden" name="captId" value="AqXpRsh3s9QHfxUb6r4b7uOWqMT" ng-model="captId">

我有输入项 [ name="captId" ],需要获取它的值。
import re , urllib ,  urllib2
a = urllib2.urlopen('http://www.example.com/','').read()

感谢


更新 1

我安装了BeautifulSoup并使用它,但是出现了一些错误

代码

 import re , urllib ,  urllib2
 a = urllib2.urlopen('http://www.example.com/','').read()
 soup = BeautifulSoup(a)
 value = soup.find('input', {'name': 'scnt'}).get('value')

错误

"soup = BeautifulSoup(a) NameError: 名称 'BeautifulSoup' 未定义"


2
你可以像获取其他输入一样获取隐藏输入的值。 - Barmar
是的,但我应该使用 re.findall 还是 re.search,以及如何编写正确的模式? - IBRA
BeautifulSoup应该是你需要的:首先选择表单,然后选择隐藏字段。 - Serge Ballesta
@IBRA 我误解了,我以为你在谈论的是表单提交到的脚本,而不是一个网络爬虫脚本。 - Barmar
@Barmar 是的,我想要发送POST请求到URL并获取输入信息。 - IBRA
1个回答

11
使用re模块来解析xml或html通常被认为是不良实践。只有当负责要解析的页面时才使用它。如果不是这样,那么你的正则表达式可能非常复杂,或者如果有人用几乎任何其他东西替换了<input type="hidden" name=.../>,你的脚本可能会崩溃。 BeautifulSoup是一个HTML解析器,具有以下功能:
  • 自动修复小错误(未关闭的标签等)
  • 构建DOM树
  • 允许您浏览树形结构,搜索特定标签及其特定属性
  • 可用于Python 2和3
除非您有充分的理由不这样做,否则应该使用它而不是re进行HTML解析。
例如,假设txt包含整个页面,则查找所有隐藏字段就像这样简单:
from bs4 import BeautifulSoup
soup = BeautifulSoup(txt)
hidden_tags = soup.find_all("input", type="hidden")
for tag in hidden_tags:
    # tag.name is the name and tag.value the value, simple isn't it ?

@IBRA 在引用的网站上有很多这样的内容...但是还是看一下我的编辑吧。 - Serge Ballesta
我使用你的代码片段得到了完整的标签,但是我不确定如何使用它来获取我需要的数据。 - deepak sen
@deepaksen:这是一个相当旧的帖子了。您确定只想发表评论,还是想要提出一个新问题,并以此帖子作为您目前研究的参考? - Serge Ballesta
当然,我会这样做。 - deepak sen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接