从本地文件解析HTML

时间:2015-05-05 18:57:35

标签: python html google-app-engine lxml

我正在使用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

3 个答案:

答案 0 :(得分:2)

您的工作目录是您的app目录的基础。因此,如果您的应用程序组织如下:

  • 的app.yaml
  • NL /
    • home.html的

然后,您可以在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()函数所在的源文件的资源的路径...