2012-08-11 163 views
2

小問題解析XHTML,真的在這裏卡住了,我不明白髮生了什麼,我只是想解析從網絡,沒有什麼特別的一個正常的XHTML ...與LXML蟒蛇

這裏的錯誤:

File "class/page.py", line 85, in xslParse 
    doc = lxml.etree.fromstring(self.content) 
    File "lxml.etree.pyx", line 2753, in lxml.etree.fromstring (src/lxml/lxml.etree.c:54647) 
    File "parser.pxi", line 1578, in lxml.etree._parseMemoryDocument (src/lxml/lxml.etree.c:82764) 
    File "parser.pxi", line 1457, in lxml.etree._parseDoc (src/lxml/lxml.etree.c:81562) 
    File "parser.pxi", line 965, in lxml.etree._BaseParser._parseDoc (src/lxml/lxml.etree.c:78232) 
    File "parser.pxi", line 569, in lxml.etree._ParserContext._handleParseResultDoc (src/lxml/lxml.etree.c:74488) 
    File "parser.pxi", line 650, in lxml.etree._handleParseResult (src/lxml/lxml.etree.c:75379) 
    File "parser.pxi", line 590, in lxml.etree._raiseParseError (src/lxml/lxml.etree.c:74712) 
    XMLSyntaxError: StartTag: invalid element name, line 1, column 2 

self.content是一個普通的字符串,由http響應給出,沒有乾淨,沒有替換,沒有,只是服務器的響應,所以什麼是fu ..?

的HTML的開始是:

<!doctype html> 
<!-- paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ --> 
<!--[if lt IE 7 ]> <html lang="fr" class="no-js ie6" itemscope itemtype="http://schema.org/Product"> <![endif]--> 
<!--[if IE 7 ]> <html lang="fr" class="no-js ie7" itemscope itemtype="http://schema.org/Product"> <![endif]--> 
<!--[if IE 8 ]> <html lang="fr" class="no-js ie8" itemscope itemtype="http://schema.org/Product"> <![endif]--> 
<!--[if IE 9 ]> <html lang="fr" class="no-js ie9" itemscope itemtype="http://schema.org/Product"> <![endif]--> 
<!--[if (gt IE 9)|!(IE)]><!--> <html lang="en" class="no-js" itemscope itemtype="http://schema.org/Product"> <!--<![endif]--> 
<head>...... 

一個正常的網頁,爲什麼LXML無法解析正常以及格式化文檔?

+3

您是否嘗試過使用'lxml.html.fromstring'而不是'lxml.etree.fromstring'? – unutbu 2012-08-11 20:19:59

+0

現在就去查看一下! thx兄 – hgates 2012-08-11 20:36:07

+0

它工作更好thx真的:) – hgates 2012-08-11 20:45:47

回答

7

<!doctype html>表示它是一個使用HTML語法的HTML5文檔。所以你應該使用HTML(不是XML)分析器。爲了比較,XML文檔可能以<?xml version="1.0" encoding="UTF-8"?>開頭。可以使用lxml.html.fromstring()作爲@unutbu suggested in the comments

如果您收到了HTTP然後HTML5文檔使用XML語法應該有一個XML媒體類型的頁面,如application/xhtml+xmlapplication/xml代替例如text/html的HTML語法。

+1

複製!事情現在已經清楚了,以爲html文檔也是xml文檔...那麼發送MIME類型LI文本/ html和xml,做瀏覽器,lxml渲染兩種類型的區別是什麼? – hgates 2012-08-11 22:48:33

+0

HTML和XML是不同的語言;不同的解析器用於解析它們,它們返回具有相似但不同接口的不同對象。 – jfs 2012-08-11 23:23:50