从 BeautifulSoup 结果中获取表单“动作”

Posted

技术标签:

【中文标题】从 BeautifulSoup 结果中获取表单“动作”【英文标题】:Getting form "action" from BeautifulSoup result 【发布时间】:2014-06-21 04:27:00 【问题描述】:

我正在为网站编写 Python 解析器以自动完成某些工作,但我不太喜欢 Py 的“re”模块(正则表达式)并且无法使其工作。

req = urllib2.Request(tl2)
req.add_unredirected_header('User-Agent', ua)
response = urllib2.urlopen(req)
try:
    html = response.read()
except urllib2.URLError, e:
    print "Error while reading data. Are you connected to the interwebz?!", e

soup = BeautifulSoup.BeautifulSoup(html)
form = soup.find('form', id='form_product_page')
pret = form.prettify()

print pret

结果:

<form id="form_product_page" name="form_1362737440" action="/download/791055/164084/" method="get">
<input id="nojssubmit" type="submit" value="Download" />
</form>

确实,代码已经完成,正是我需要的开始。现在,我想知道应该以哪种方式从“form”标签中提取“action”属性。这只是我需要的 BeautifulSoup 响应。

我尝试使用form = soup.find('form', id='form_product_page').parent.get('action'),但结果为“无”。我要提取的是例如“/download/791055/164084/”。这在来自链接的每个 URL 上都不同。


变量(示例): tl2 = http://example.com ua = Mozilla 火狐 / 14.04

【问题讨论】:

【参考方案1】:

您可以一步完成:

action = soup.find('form', id='form_product_page').get('action')

【讨论】:

哎呀,看来我得多阅读 BS 文档了。这正是我所需要的。谢谢!已接受答案。 在我的情况下,如果 action 包含参数,这不起作用,即 action="https://site.tld/file?arg1=test".get('action') 只会检索 https://site.tld/file

以上是关于从 BeautifulSoup 结果中获取表单“动作”的主要内容,如果未能解决你的问题,请参考以下文章

Beautifulsoup - 提交表单数据

如何从 BeautifulSoup ( Python ) 中的表中获取第一个子表行

从 JSON 文件中删除重复条目 - BeautifulSoup

BeautifulSoup find_all 仅限于 50 个结果?

从表单中取值,从 MySQL 中提取结果,并使用 AJAX 获取结果

BeautifulSoup 从 find_all 的结果中找到 url