使用 Python 下载完整 HTML 网页时出现问题

Issues downloading full HTML of webpage with Python

我正在做一个项目,我需要在 http://www.nhl.com/ 的当前分数部分找到的所有游戏 ID # 来下载每场比赛的内容/解析统计数据。我希望能够一次性获取所有当前游戏 ID,但出于某种原因,无论我如何尝试,我都无法下载完整的 HTML 页面。我正在使用 requestsbeautifulsoup4.

这是我的问题:

我确定我感兴趣的特定标签是 div,其中 CSS class = 'scrblk'。所以,我写了一个函数来传递给 BeautifulSoup.find_all() 来给我,特别是 CSS class 的块。看起来像这样:

    def find_scrblk(css_class):
        return css_class is not None and css_class == 'scrblk'

因此,当我实际转到 Firefox 中的网页并保存它,然后在 beautifulsoup4 中加载保存的文件时,我执行了以下操作:

>>>soup = bs(open('nhl.html'))
>>>soup.find_all(class_=find_scrblk)
[<div class="scrblk" id="hsb2015010029"> <div class="defaultState"....]

一切都很好,很漂亮;我有我需要的所有信息。但是,当我尝试使用我知道的几种自动方法中的任何一种来下载该页面时,这只会返回一个空列表。这是我尝试过的:

综上所述,我无法从 HTML 文件中解析出我需要的数据;就好像它们没有被完全下载或什么的,但我不知道那是什么或如何修复它。我在这里做错了什么或错过了什么?我在 Ubuntu 15.04.

上使用 python 2.7.9

所有文件都可以在这里下载:

https://www.dropbox.com/s/k6vv8hcxbkwy32b/nhl_html_examples.zip?dl=0

正如对您问题的评论所述,您必须重新考虑您的方法。您在浏览器中看到的不是响应包含的内容。该站点使用 JavaScript 加载您要查找的信息,因此您应该更仔细地查看结果,以便找到您要查找的内容。

以后要处理此类问题,请尝试使用 Chrome 的开发人员控制台并禁用 JavaScript 并以这种方式打开网站。然后你会看到你是否面对 JS 或者该站点是否包含你要查找的值。

顺便说一下,您的行为违反了 NHL 网站的服务条款(根据第 2 节禁止的内容和活动)

Engage in unauthorized spidering, scraping, or harvesting of content or information, or use any other unauthorized automated means to compile information;