【发布时间】:2012-12-07 04:31:25
【问题描述】:
在 Win7 x64 上使用 Python 3.2。我有一个每次启动 IDLE 时都想运行的脚本。这是我的脚本:
import sys
from bs4 import BeautifulSoup
sys.setrecursionlimit(2000)
soup = BeautifulSoup()
def soupSetup(file_name, encode_type):
soup = BeautifulSoup(open("C:\\Python32\\html\\"+file_name+".html", encoding=encode_type))
这样一切都设置好了,我所要做的就是传递soupSetup()我想使用的html文件,然后我就可以开始处理数据了。
我的问题是——如果我在使用print(soup.prettify())时按原样使用代码,我只会得到一个空行。如果我在运行 print 语句时不先实例化该类,我会得到:
Traceback (most recent call last):
File "<pyshell#22>", line 1, in <module>
print(soup.prettify())
NameError: name 'soup' is not defined
对于那些不熟悉 BeautifulSoup 汤的人来说,<class 'bs4.BeautifulSoup'> 是一个实例。
如何让汤对象在我的脚本之外持续存在?
【问题讨论】:
-
两个问题合二为一。第一个关于要在启动时执行的代码的问题是通过根据docs.python.org/dev/library/site.html 在某个目录中创建模块 usercustomize/sitecustomize 来解决的。现在第二个问题可以通过在启动模块上增加
__builtin__:import __builtin__; setattr(__builtin__, 'soup', soup)来解决,然后soup将神奇地在其他任何地方可用。我不建议这样做,您可能需要重新考虑您想要实现的目标。此外,在您的正确方法中,您需要重新定义全局soup。 -
你应该把它作为答案......因为它完全回答了他的问题......
标签: python python-3.x beautifulsoup python-idle