BeautifulSoup4:打开URL的FileNotFoundError

时间:2015-06-01 22:17:10

标签: python beautifulsoup

我使用BeautifulSoup4刮取网站。这是我所拥有的精简版本:

from bs4 import BeautifulSoup

def getTeamRoster(teamURL):
     soup = BeautifulSoup(open(teamURL))

def main():
     getTeamRoster("http://modules.ussquash.com/ssm/pages/leagues/Team_Information.asp?id=11325")

我已拉起页面,并在浏览器(Chrome)中正确加载。出于某种原因,我收到以下错误:

Traceback (most recent call last):
  File "SquashScraper.py", line 61, in <module>
    main()
  File "SquashScraper.py", line 58, in main
    getTeamRoster("http://modules.ussquash.com/ssm/pages/leagues/Team_Information.asp?id=11325")
  File "SquashScraper.py", line 21, in getTeamRoster
    soup = BeautifulSoup(open(teamURL))
FileNotFoundError: [Errno 2] No such file or directory: 'http://modules.ussquash.com/ssm/pages/leagues/Team_Information.asp?id=11325'

知道可能发生的事情吗?

我查看了其他人的BeautifulSoup4代码,并认为我所做的是访问网页HTML的惯用方式。

谢谢, bclayman

2 个答案:

答案 0 :(得分:1)

BeautifulSoup在描述中提到它是解析的库,而不是实际从远程网站获取HTML的库。为此,您需要另一个库,例如urllib(特别是函数urlopen,然后从它返回的对象中read。)

至于您收到Python错误的原因,open是为打开文件而设计的,而不是用于HTML检索。如果您打开包含HTML的本地文件,您的代码将起作用。但是,因为您有一个URL作为参数,open实际上是在您的系统上查找具有该名称的文件。因为该文件不存在,所以会引发错误。

答案 1 :(得分:0)

open正在寻找本地文件。您希望首先将要加载的页面的HTML保存到字符串中,然后使用BeautifulSoup。根据您的命名,简明扼要:

import urllib2
html = urllib2.urlopen(teamURL).read()
soup = BeautifulSoup(html)