无法让Beautiful Soup正确处理大型播放篮球数据表。代码:
import urllib.request
from bs4 import BeautifulSoup
request = urllib.request.Request('http://www.basketball-reference.com/boxscores/pbp/201611220LAL.html')
result = urllib.request.urlopen(request)
resulttext = result.read()
soup = BeautifulSoup(resulttext, "html.parser")
pbpTable = soup.find('table', id="pbp")
如果您自己运行此示例,您会发现该表未完全解析 - 我们得到的就是:
<table class="suppress_all sortable stats_table" data-cols-to-freeze="1" id="pbp">
<caption>Play-By-Play Table</caption>
<tr class="thead" id="q1">
<th colspan="6">1st Q</th></tr></table>
问题在于解析本身打印汤变量给出(除其他外)
</div>
<div class="table_wrapper" id="all_pbp">
<div class="section_heading">
<span class="section_anchor" data-label="Play-By-Play" id="pbp_link"></span>
<h2>Play-By-Play</h2> <div class="section_heading_text">
<ul> <li> Jump to: <a href="#q1">1st</a> | <a href="#q2">2nd</a> | <a href="#q3">3rd</a> | <a href="#q4">4th</a> <br> <span class="bbr-play-score key">scoring play</span> <span class="bbr-play-tie key">tie</span> <span class="bbr-play-leadchange key">lead change</span></br></li>
</ul>
</div>
</div> <div class="table_outer_container">
<div class="overthrow table_container" id="div_pbp">
<table class="suppress_all sortable stats_table" data-cols-to-freeze="1" id="pbp"><caption>Play-By-Play Table</caption><tr class="thead" id="q1">
<th colspan="6">1st Q</th></tr></table></div></div></div></div></div></body></html>
最重要的是,/ table标签无处不在。查看相关链接的页面源,我们可以看到该表未在那里关闭 - 它会持续一段时间。除了实现我自己的HTML解析代码之外,还有什么解决方法吗?
答案 0 :(得分:2)
在
中使用"lxml"
或"html5lib"
代替"html.parser"
soup = BeautifulSoup(resulttext, "lxml")`
您可以获得更多数据。
但如果您还没有,可能需要安装lxml
或html5lib
。
pip install lxml
pip install html5lib
lxml
可能需要C / C ++编译器,libxml
库(Windows上为libxml.dll
)等。