我使用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
答案 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)