【发布时间】:2016-12-13 12:04:34
【问题描述】:
有一个提供足球(足球)相关统计数据的网站,我发现查询数据的内部选项受到限制并且想要执行我自己的分析,但要这样做我必须抓取数据 - 我是使用美丽的汤 4。
文档位于here。
根据 Beautiful Soup 文档,我可以使用 find_all() 搜索特定标签,但是当我尝试使用它时,它会出现空白。
from urllib.request import urlopen
from bs4 import BeautifulSoup
import csv as csv
html = urlopen("http://members.fantasyfootballscout.co.uk/player-stats/goalkeepers/")
bsObj = BeautifulSoup(html.read(), "lxml")
大概是在付费墙后面,您将无法访问它。考虑到这一点,我将发布代码 sn-p。
<tbody>
<tr>
<td><input type="checkbox" name="players[]" value="61302"></td>
<td class="first">
<a href="/player-profiles/ryan-allsopp/" class="enhanced-title" title="Ryan Allsopp"> Allsopp </a>
<div class="profile-title">
<img src="/images/players/small/default.png" alt="" width="42" height="64">
<br>Ryan Allsopp <br> (Bournemouth, Goalkeeper)
</div>
</td>
<td class="nowrap">
<span class="team-disc bou-light"></span>
<a href="/player-stats/goalkeepers/fantasy-index/bournemouth/" title="Bournemouth"> BOU</a>
</td>
<td title="Starts: 0">0</td>
<td title="Time Played: 54"> 54</td>
<td title="Subbed On: 1">1</td>
<td title="Subbed Off: 0"> 0</td>
<td title="Goals: 0"> 0 </td>
<td title="Assists: 0"> 0 </td>
<td title="Clean Sheets: 0">0 </td>
<td title="Goals Conceded: 1"> 1 </td>
<td title="Own Goals: 0"> 0 </td>
<td title="Saves: 0"> 0 </td>
<td title="Premier League Yellow Cards: 0"> 0</td>
<td title="Premier League Total Red Cards: 0"> 0 </td>
</tr>
<tr>
<td><input type="checkbox" name="players[]" value="57187"></td>
首先,我想提取所有表数据,但我什至无法识别 BS 中的一个 td。
bsObj.td # returns empty set
bsobj.find_all('td') # returns empty set
我哪里错了?
【问题讨论】:
-
您提到了付费墙。你确定你的 Python 代码可以访问这个页面吗?你试过
print(html.read())吗? -
你应该重新格式化你的 HTML 文本,它很不可读。
-
您必须登录才能访问它,如果您不这样做,您希望它如何工作?发布您在登录时在浏览器中看到的 html 与问题完全无关
-
@Will,不,如果是这样,我会非常担心。您需要登录并保留会话 cookie,我建议使用
requests.Sessiondocs.python-requests.org/en/master/user/advanced/… -
@Will,很多 ips 都是动态的,所以只使用一个 ip 地址来保持登录将是一个很好的主意,即使它是静态的,很多人也可以并且很可能是相同的网络,那么您是否希望任何共享您的 IP 的人无需登录即可访问您的敏感数据?
标签: python beautifulsoup