我正在使用Google App Engine和Python。我想从与我的Python脚本相同的项目中获取HTML文件的树。我尝试了很多东西,比如使用绝对网址(例如http://localhost:8080/nl/home.html)和相对网址(/nl/home.html)。两者似乎都不起作用。我使用这段代码:
class HomePage(webapp2.RequestHandler):
def get(self):
path = self.request.path
htmlfile = etree.parse(path)
template = jinja_environment.get_template('/nl/template.html')
pagetitle = htmlfile.find(".//title").text
body = htmlfile.get_element_by_id("body").toString()
它返回以下错误: IOError:读取文件时出错' /nl/home.html' ;:无法加载外部实体" /nl/home.html
有没有人知道如何使用Python从同一个项目中获取HTML文件的树?
修改
这是工作代码:
class HomePage(webapp2.RequestHandler):
def get(self):
path = self.request.path.replace("/","",1)
logging.info(path)
htmlfile = html.fromstring(urllib.urlopen(path).read())
template = jinja_environment.get_template('/nl/template.html')
pagetitle = htmlfile.find(".//title").text
body = innerHTML(htmlfile.get_element_by_id("body"))
def innerHTML(node):
buildString = ''
for child in node:
buildString += html.tostring(child)
return buildString
答案 0 :(得分:2)
您的工作目录是您的app目录的基础。因此,如果您的应用程序组织如下:
然后,您可以在nl/html.html
读取您的文件(假设您没有更改工作目录)。
答案 1 :(得分:0)
似乎是权限问题;检查你是否python脚本可以访问该文件。如果您将该文件提供给每个人,它是否有效?
答案 2 :(得分:0)
我相信您的错误位于文件的路径中。您假设您的app目录是服务器上文件系统的根目录。不一定是这种情况。实际上,我找不到关于文件位置的任何文档,所以这就是我所做的(它在开发服务器上工作,我还没有在生产中厌倦):
我认为Google会保留应用程序中文件的相对位置。因此,如果我知道一个文件的位置,我可以确定其余文件的位置。幸运的是,python规范允许您以编程方式确定python源文件的位置,如下所示:
def get_src_dir(){
return os.path.dirname(os.path.realpath(__file__))
}
get_src_dir()您将获得源文件的位置。
os.path.join(get_src_dir(), rel_path_to_asset)
现在可以为您提供资产的路径。 rel_path_to_asset是相对于get_src_dir()函数所在的源文件的资源的路径...