2015-06-01 45 views
2

我正在使用BeautifulSoup4来刮取网站。这里是我有的一个精简版:BeautifulSoup4:FileNotFoundError用于打开URL

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

回答

1

BeautifulSoup提到了这是分析,实际上从获取远程网站的HTML,而不是库库中的描述。为此,您需要使用另一个库,如urllib(具体来说,函数urlopen,然后返回它返回的对象read)。

至于你为什么得到Python错误,open是为打开文件而设计的,而不是用于HTML检索。如果您要打开包含HTML的本地文件,则您的代码将起作用。然而,因为你有一个URL作为参数,open实际上是在寻找一个你的这个名字的文件。由于该文件不存在,所以会引发错误。

0

open正在寻找本地文件。您希望首先将您尝试加载的页面的HTML保存到字符串中,然后使用BeautifulSoup。考虑到你的命名,将其缩小到其要领中:

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