【问题标题】:Web scraping with BS4: unable to find tag使用 BS4 进行网页抓取:无法找到标签
【发布时间】: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.Session docs.python-requests.org/en/master/user/advanced/…
  • @Will,很多 ips 都是动态的,所以只使用一个 ip 地址来保持登录将是一个很好的主意,即使它是静态的,很多人也可以并且很可能是相同的网络,那么您是否希望任何共享您的 IP 的人无需登录即可访问您的敏感数据?

标签: python beautifulsoup


【解决方案1】:

以上评论很有帮助,尽管未能解决问题,但我已按照建议保留会话 cookie。

该解决方案与网站的 javascript 部分进行的异步 HTTP 调用有关。我已经安装了 selenium(文档here),我将使用它来执行 javascript,让我可以访问我想要的数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-08
    • 2018-12-03
    • 1970-01-01
    相关资源
    最近更新 更多