我正在制作一个用户名刮刀,当我解析它时,我真的无法理解为什么HTML会“消失”。我们以此网站为例: http://www.lolking.net/leaderboards#/eune/1
看看里面有一个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>
为什么会发生这种情况,我该如何解决?
答案 0 :(得分:2)
此网站需要使用JavaScript才能运行。 JavaScript用于通过形成Web请求来填充表,该请求可能指向后端API。这意味着&#34; raw&#34;没有任何JavaScript效果的HTML有一个空表。
如果我们访问禁用JavaScript的网站,我们实际上可以在后台看到这个空表:
BeautifulSoup不会导致此JavaScript执行。相反,请查看一些替代库,例如更高级的Selenium。
答案 1 :(得分:0)
正如您在Chrome开发工具中看到的那样,该网站会发送2个XHR请求来获取数据,并使用JavaScript显示它。
由于BeautifulSoup
是HTML 解析器。它不会执行JavaScript。您应该使用selenium
之类的工具来模拟真实的浏览器。
但在这种情况下,您可能更善于使用API,它们用于获取数据。您可以通过查看“网络”标签轻松查看他们从哪些网址获取数据。重新加载页面,选择XHR
,您可以使用该信息通过Python Requests
之类的内容创建自己的请求。