2013-06-21 6 views
1

Я использую Python 3.3 и LXML 3.2.0Как вставить HTML-элемент в дереве lxml.html

Проблема: У меня есть веб-страницы в переменной webpageString = "<html><head></head><body>webpage content</body></html>" И я хочу, чтобы вставить CSS-ссылка тег между двумя тегами заголовков, так что я получаю webpageString = "<html><head><link rel='stylesheet' type='text/css'></head><body>webpage content</body></html>"

Я написал следующий код:

def addCssCode(self): 
    tree = html.fromstring(self.article) 
    headTag = tree.xpath("//head") 
    #htmlTag = tree.getroot() 

    if headTag is None: 
     pass #insert the head tag first 

    cssLinkString = "<link rel='stylesheet' type='text/css' href='"+ self.cssLocation+"'>" 
    headTag[0].insert(1, html.HtmlElement(cssLinkString)) 
    print(cssLinkString) 
    self.article = html.tostring(tree).decode("utf-8") 

Whi кан приводит к вставке зача-

<HtmlElement>&lt; link rel='stylesheet' type='text/css' href='cssCode.css' &gt;</HtmlElement> 

Я также попробовал решение в следующей странице идентичной проблемы, но она также не работает. python lxml append element after another element

Как я могу это решить? Thanks

ответ

0

Использование .insert/.append способ.

import lxml.html 

def add_css_code(webpageString, linkString): 
    root = lxml.html.fromstring(webpageString) 
    link = lxml.html.fromstring(linkString).find('.//link') 
    head = root.find('.//head') 
    title = head.find('title') 
    if title == None: 
     where = 0 
    else: 
     where = head.index(title) + 1 
    head.insert(where, link) 
    return lxml.html.tostring(root) 

webpageString1 = "<html><head><title>test</title></head><body>webpage content</body></html>" 
webpageString2 = "<html><head></head><body>webpage content</body></html>" 
linkString = "<link rel='stylesheet' type='text/css'>" 

print(add_css_code(webpageString1, linkString)) 
print(add_css_code(webpageString2, linkString)) 
+0

Спасибо, это сработало, но оно не имеет ничего общего с методом append(). Мне нужно использовать insert(), потому что мне нужно вставить тег ссылки в определенную позицию, то есть после тега title. – user1986258

+0

@ user1986258, я обновил код. – falsetru