使用urllib和beautifulsoup查找“hidden”标签内的值

时间:2011-03-14 13:47:33

标签: python beautifulsoup urllib

我想知道是否可以显示隐藏标签的值。即时通讯使用urllib和beautifulsoup但我似乎无法得到我想要的东西。

使用的html代码如下:(保存为 hiddentry.html

<html>

<head>
    <script type="text/javascript">
        //change hidden elem value
        function changeValue()
        {
            document.getElementById('hiddenElem').value = 'hello matey!';
        }

        //this will verify if i have successfully changed the hiddenElem's value
        function printHidden()
        {
            document.getElementById('displayHere').innerHTML = document.getElementById('hiddenElem').value;
        }
    </script>
</head>

<body>

    <div id="hiddenDiv" style="position: absolute; left: -1500px">
        <!--i want to find the value of this element right here-->
        <span id="hiddenElem"></span>
    </div>

    <span id="displayHere"></span>

    <script type="text/javascript">
        changeValue();
        printHidden();
    </script>

</body>

</html>

我想要打印的是id hiddenElem 的元素的值。 要做到这一点,我尝试使用urllib和beautifulsoup组合。我使用的代码是:

from BeautifulSoup import BeautifulSoup
import urllib2
import urllib

mysite = urllib.urlopen("http://localhost/hiddentry.html")
soup = BeautifulSoup(mysite)
print soup.prettify()
print '\n\n'

areUthere = soup.find(id="hiddenElem").find(text=True)
print areUthere

我获得的输出虽然是。 有任何想法吗?是我想要实现的甚至可能吗?

1 个答案:

答案 0 :(得分:2)

beautifulsoup解析它从服务器获取的html。如果你想看到生成的值,你需要以某种方式在页面上执行嵌入式javascript,然后再将字符串传递给beautifulsoup。运行javascript后,您将修改后的DOM html传递给beautifulsoup。

就浏览器仿真而言:

使用浏览器模拟,你应该能够下拉基础HTML,运行浏览器模拟来执行javascript,然后使用修改后的DOM HTML并将其插入到beautifulsoup中。