<h2>抱歉,不,单靠BeautifulSoup是不可能的</h2>
<p>问题是BS4不是一个完整的web浏览器。它只是一个HTML解析器。它不解析CSS,也不解析Javascript。在</p>
<p>一个完整的web浏览器至少要做四件事:</p>
<ol>
<li>连接到web服务器,获取数据</li>
<li>解析HTML内容和CSS格式并显示网页</li>
<li>解析Javascript内容并运行它。在</li>
<li>为浏览器导航、HTML表单和Javascript程序的事件API等提供用户交互</li>
</ol>
<p>还是不确定?现在看看你的代码。BS4甚至没有包括第一步,即获取web页面,要做到这一点,您必须使用<code>urllib2</code>。在</p>
<p>动态网站通常包括运行在浏览器上的Javascript,并定期更新内容。BS4不提供这些,因此您不会看到它们,而且仅使用BS4也不会看到它们。为什么?因为上面第(3)项,所以不会下载和执行Javascript程序。在IE、Firefox或Chrome中都会出现这种情况,这就是为什么这些工具只能显示动态内容,而只有BS4的抓取不能显示动态内容。在</p>
<p><a href="http://phantomjs.org/" rel="nofollow noreferrer">PhantomJS</a>和<a href="http://casperjs.org/" rel="nofollow noreferrer">CasperJS</a>提供了一个更加机械化的浏览器,通常可以运行支持动态网站的JavaScript代码。但是CasperJS和PhantomJS是用服务器端Javascript编程的,而不是Python。在</p>
<p>显然,有些人<a href="https://stackoverflow.com/questions/22028775/tried-python-beautifulsoup-and-phantom-js-still-cant-scrape-websites">using a browser built into PyQt4 for these kinds of dynamic screenscaping tasks</a>,隔离了部分DOM,并将其发送到BS4进行解析。这可能允许使用Python解决方案。在</p>
<p>在注释中,@Cyphase建议您需要的确切数据可能在不同的URL中可用,在这种情况下,可以使用urllib2/BS4获取并解析这些数据。这可以通过仔细检查站点上运行的Javascript来确定,特别是您可以查找计划更新的<code>setTimeout</code>和{<cd3>},或者{<cd4>},或者jQuery的<code>.load</code>函数从后端获取数据。用于动态内容更新的Javascripts通常只从同一网站的后端url获取数据。如果他们使用jQuery,<code>$('#frequenz')</code>引用div,通过在JS中搜索,您可能会找到更新div的代码。没有jQuery,JS更新可能会使用<code>document.getElementById('frequenz')</code>。在</p>