Beautiful Soup 4 导入错误?安装错误?
Posted
技术标签:
【中文标题】Beautiful Soup 4 导入错误?安装错误?【英文标题】:Beautiful Soup 4 import error? install error? 【发布时间】:2014-06-28 12:50:21 【问题描述】:背景:
我使用的是 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:脚本 Melissa$ ./spider2.py 来自:无法读取 /var/mail/bs4 ./spider2.py:第 3 行:导入:找不到命令 ./spider2.py:第 4 行:导入:找不到命令 ./spider2.py:第 6 行:意外标记 `(' 附近的语法错误 ./spider2.py: 第 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命令是什么?如果是这样,那将如何发生?导入不是标准的,它是否依赖于某些库?
我错过了什么?我接下来应该看哪里?这是一个简单的答案吗? (通常是,但我只是看不到它。)我是 python 的相对新手,并且渴望但对 bash 还不太了解。我也是第一次发布 *** 问题,所以提前感谢任何建议/帮助。
【问题讨论】:
你为什么要执行./spider2.py
这样的脚本,这样运行——python spider2.py
当然,你,嗯……需要通过python运行python脚本。这样做了,得到了预期的结果。谢谢你最严厉的。 :)
【参考方案1】:
为了能够使用./spider2.py
直接从终端执行脚本,您必须在脚本的最开始使用所谓的shebang line 为其指定一个解释器。对于 Python,这将是:
#!/usr/bin/env python
from bs4 import BeautifulSoup
# ...
如果没有指定解释器,则使用终端解释器执行脚本,在这种情况下可能是bash
,当然不能运行Python代码。
当然,该文件也必须标记为可执行文件。
或者您可以使用 Python 解释器执行脚本,而无需使用 shebang 行,正如 @theharshest 所建议的那样:
python spider2.py
我自己更喜欢后一种选择。
【讨论】:
【参考方案2】:脚本应该被执行为 -
python spider2.py
而不是-
./spider2.py
【讨论】:
如果文件被标记为可执行文件,您可能已经建议了一个适当的标题,允许提问者在尝试时运行它。 @AaronHall 你假设该文件被标记为可执行文件。以上是关于Beautiful Soup 4 导入错误?安装错误?的主要内容,如果未能解决你的问题,请参考以下文章
安装包 Beautiful Soup 失败。错误消息是“SyntaxError:调用'print'时缺少括号”