使用Python下载完整的网页HTML的问题

时间:2015-09-25 08:01:30

标签: python html beautifulsoup python-requests

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

这是我的问题:

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

    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"....]

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

  • 使用requests.get()并将.text属性保存在文件
  • 使用iter_content()的{​​{1}}和iter_lines()方法 一个接一个地写入文件的对象
  • 使用request下载页面(通过wget) 并打开结果文件。对于这个选项,我确定使用subprocess.call()--page-requisites标志,所以我下载了(或者我认为) 所有必要的数据。

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

顺便说一下,你所做的是反对NHL网站的服务条款(根据第2节禁止的内容和活动)

  

从事未经授权的抓取,抓取或收集内容或信息,或使用任何其他未经授权的自动方式汇编信息;