在python中使用Beautiful Soup解析html

时间:2013-10-19 13:49:02

标签: python html beautifulsoup

我有以下html:

<html lang="en-US" xml:lang="en-US" xmlns="http://www.w3.org/1999/xhtml">
<body>
<title>CATe - hj1612</title>
</td></tr></table>
</td></tr></table></td><td><img src="icons/arrowredright.gif"/></td><td align="center">
<input name="keyt" type="hidden" value="a3dvl"/>
<input type="submit" value="View"/><br/>or<br/>
<input type="reset" value="Reset"/>
</td>
</tr>
</body>
</html>

我正试图获得keyt的价值。因为html我正在使用BeautifulSoup

soup = BeautifulSoup(html)

我知道您可以soup.find使用id soup.find(id="randomid")

但是soup.find(name="keyt")无法正常工作,因为它不是正文标记...因此我可以使用普通的if substring in string:方法

for line in soup.find_all('input'):
    if "keyt" in line:
        print line

但这种方法似乎不起作用,我是python的新手,所以会感谢任何帮助/指向正确的方向

2 个答案:

答案 0 :(得分:3)

from bs4 import BeautifulSoup

html = """
<html lang="en-US" xml:lang="en-US" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>CATe - hj1612</title>
</td></tr></table>
</td></tr></table></td><td><img src="icons/arrowredright.gif"/></td><td align="center">
<input name="keyt" type="hidden" value="a3dvl"/>
<input type="submit" value="View"/><br/>or<br/>
<input type="reset" value="Reset"/>
</td>
</tr>
</html>
"""

soup = BeautifulSoup(html)

print soup.find(name="input", attrs={'name': 'keyt'})

输出:

<input name="keyt" type="hidden" value="a3dvl"/>

如果要查找多个匹配项,可以使用find_all函数代替find。至于如何使用这两个函数,name是您要查找的标记的名称,而attrs字典是真正用于查找内容的内容在您的情况下,特定属性是name属性。

答案 1 :(得分:1)

你有一些奇怪的HTML。 HEAD标签未关闭,td,表未打开。我甚至无法想象,汤可以解析它。