为什么不是我从BeautifulSoup获得的HTML与我在检查元素时看到的HTML相同?

时间:2016-08-23 12:33:39

标签: python html beautifulsoup

我正在制作一个用户名刮刀,当我解析它时,我真的无法理解为什么HTML会“消失”。我们以此网站为例: http://www.lolking.net/leaderboards#/eune/1

HTML output

看看里面有一个tbody和一堆表吗? 好吧,当我解析它并将其输出到shell时,tbody是空的

   <div style="background: #333; box-shadow: 0 0 2px #000; padding: 10px;">
    <table class="lktable" id="leaderboard_table" width="100%">
     <thead>
      <tr>
       <th style="width: 80px;">
        Rank
       </th>
       <th style="width: 80px;">
        Change
       </th>
       <th style="width: 100px;">
        Tier
       </th>
       <th>
        Summoner
       </th>
       <th style="width: 150px;">
        Top Champions
       </th>
      </tr>
     </thead>
     <tbody>
     </tbody>
    </table>
   </div>
  </div>

为什么会发生这种情况,我该如何解决?

2 个答案:

答案 0 :(得分:2)

此网站需要使用JavaScript才能运行。 JavaScript用于通过形成Web请求来填充表,该请求可能指向后端API。这意味着&#34; raw&#34;没有任何JavaScript效果的HTML有一个空表。

如果我们访问禁用JavaScript的网站,我们实际上可以在后台看到这个空表:

Screenshot

BeautifulSoup不会导致此JavaScript执行。相反,请查看一些替代库,例如更高级的Selenium

答案 1 :(得分:0)

正如您在Chrome开发工具中看到的那样,该网站会发送2个XHR请求来获取数据,并使用JavaScript显示它。

由于BeautifulSoup是HTML 解析器。它不会执行JavaScript。您应该使用selenium之类的工具来模拟真实的浏览器。

但在这种情况下,您可能更善于使用API​​,它们用于获取数据。您可以通过查看“网络”标签轻松查看他们从哪些网址获取数据。重新加载页面,选择XHR,您可以使用该信息通过Python Requests之类的内容创建自己的请求。