Beautiful Soup 4 导入错误?安装错误?

3 投票
2 回答
3788 浏览
提问于 2025-04-18 06:09

背景:

  • 我在使用Mac OSX,版本是10.8.5

  • 运行python -V显示我在用的是2.7.2版本

  • 运行pip freeze显示我安装了beautifulsoup4==4.3.2。

我想用Beautiful Soup 4来抓取一个网页,参考了这个教程:http://www.pythonforbeginners.com/python-on-the-web/web-scraping-with-beautifulsoup/

我在工作用的笔记本上按照说明操作,一切都正常。所以我之前成功做过一次。

但是这不是工作项目,所以我在个人笔记本上又试了一次。用的是同样的脚本,但在我的个人笔记本(还有我妻子的配置完全相同的笔记本)上,结果却是这样:

Melissas-MacBook:scripts Melissa$ ./spider2.py 
from: can't read /var/mail/bs4
./spider2.py: line 3: import: command not found
./spider2.py: line 4: import: command not found
./spider2.py: line 6: syntax error near unexpected token `('
./spider2.py: line 6: `for i in range(1,10): '

这是我的脚本:

from bs4 import BeautifulSoup

import requests
import time

for i in range(1,10): 
    url = "http://memegenerator.net/Futurama-Fry/images/popular/alltime/page/%d" % (i)
    r = requests.get(url)
    data = r.text
    soup = BeautifulSoup(data)
    results = ""
    for link in soup.find_all('img'):
        print(link.get('alt'))

我尝试通过pip卸载,然后用easy_install重新安装。安装看起来是成功的(根据pip freeze的显示),但脚本还是报了同样的错误。

错误信息里说“无法读取 /var/mail/bs4”。为什么它会期待在那找到bs4呢?我用“ls”确认过,/var/mail/确实是空的。出于绝望,我尝试了“sudo find / -atime +1 | grep bs4”,但没有找到任何有趣的东西(甚至没有找到bs4的位置)。

这个错误是说python不理解import命令吗?如果是这样,为什么会发生这种情况?import不是标准的命令吗?它是否依赖于某个库?

我漏掉了什么?接下来应该去哪里找?这个问题的答案简单吗?(通常是,但我就是看不出来。)我对python还是个新手,虽然很想学,但对bash还不太了解。这也是我第一次在stackoverflow上发问,所以提前感谢任何建议或帮助。

2 个回答

3

如果你想直接在终端里用 ./spider2.py 来运行这个脚本,你需要在脚本的最开始加上一个叫做 shebang行,来指定一个解释器。对于Python来说,这一行应该是:

#!/usr/bin/env python

from bs4 import BeautifulSoup
# ...

如果没有指定解释器,脚本会用终端默认的解释器来执行,通常是 bash,而这个解释器是无法运行Python代码的。

另外,文件还必须被标记为可执行的。

当然,你也可以直接用Python解释器来运行这个脚本,这样就不需要shebang行了,正如@theharshest所推荐的那样:

python spider2.py

我个人更喜欢后者的方式。

4

脚本应该这样执行 -

python spider2.py

而不是这样 -

./spider2.py

撰写回答