【问题标题】:using urllib and beautifulsoup to find values inside "hidden" tags使用 urllib 和 beautifulsoup 在“隐藏”标签中查找值
【发布时间】:2011-03-14 13:47:32
【问题描述】:

我想知道是否可以显示隐藏标签的值。我正在使用 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

我得到的输出是 None。 有任何想法吗?我正在努力实现的目标有可能吗?

【问题讨论】:

    标签: python beautifulsoup urllib


    【解决方案1】:

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

    就浏览器仿真而言:

    使用浏览器仿真,你应该能够拉下基础 HTML,运行浏览器仿真来执行 javascript,然后将修改后的 DOM HTML 放入beautifulsoup 中。

    【讨论】:

    • 先生,我该怎么做?我尝试对这两个函数使用 setInterval。我仍然通过网页设计学习我的方式。如果你能指出我正确的方向来解决这个问题,那就太好了
    • 给了它一个快速扫描,它让我流鼻血。所以基本上我想要完成的事情太复杂了吧?我以为我会很容易。 T_T
    • 没有javascript会很容易
    • 我认为beautifulsoup 是我网络抓取的灵丹妙药。 javascript 是一个派对大便。
    • BeautifulSoup 是一个专门用于 html 解析的 xml 解析库。解析 xml 和 html 与执行 javascript 无关。不过,我看不出你不能用这个解析器解决什么问题。您想要的信息似乎只是在文档的另一部分。如果 js 执行 ajax 调用,您想要的数据唯一会出现在文档之外。在这种情况下,请使用正则表达式从脚本标记的文本中获取 ajax 调用的 url,并在使用 json 或 xml 解析器解析之前将其打开。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多