使用 Python 下载完整 HTML 网页时出现问题
Issues downloading full HTML of webpage with Python
我正在做一个项目,我需要在 http://www.nhl.com/ 的当前分数部分找到的所有游戏 ID # 来下载每场比赛的内容/解析统计数据。我希望能够一次性获取所有当前游戏 ID,但出于某种原因,无论我如何尝试,我都无法下载完整的 HTML 页面。我正在使用 requests
和 beautifulsoup4
.
这是我的问题:
我确定我感兴趣的特定标签是 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"....]
一切都很好,很漂亮;我有我需要的所有信息。但是,当我尝试使用我知道的几种自动方法中的任何一种来下载该页面时,这只会返回一个空列表。这是我尝试过的:
- 使用
requests.get()
并在文件中保存 .text
属性
- 使用
request
的 iter_content()
和 iter_lines()
方法
逐个写入文件的对象
- 使用
wget
下载页面(通过subprocess.call()
)
并打开生成的文件。对于这个选项,我肯定会使用 --page-requisites
和 --convert-links
标志,所以我下载了(或者我认为)
所有必要的数据。
综上所述,我无法从 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;
我正在做一个项目,我需要在 http://www.nhl.com/ 的当前分数部分找到的所有游戏 ID # 来下载每场比赛的内容/解析统计数据。我希望能够一次性获取所有当前游戏 ID,但出于某种原因,无论我如何尝试,我都无法下载完整的 HTML 页面。我正在使用 requests
和 beautifulsoup4
.
这是我的问题:
我确定我感兴趣的特定标签是 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"....]
一切都很好,很漂亮;我有我需要的所有信息。但是,当我尝试使用我知道的几种自动方法中的任何一种来下载该页面时,这只会返回一个空列表。这是我尝试过的:
- 使用
requests.get()
并在文件中保存.text
属性 - 使用
request
的iter_content()
和iter_lines()
方法 逐个写入文件的对象 - 使用
wget
下载页面(通过subprocess.call()
) 并打开生成的文件。对于这个选项,我肯定会使用--page-requisites
和--convert-links
标志,所以我下载了(或者我认为) 所有必要的数据。
综上所述,我无法从 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;