2013-03-05 71 views
0

我正在解析以下頁面:http://www.amazon.de/product-reviews/B004K1K172 使用基於lxml的etree進行解析。包含整個頁面內容使用utf-16解析LXML Xpath失敗

代碼

內容變量:

myparser = etree.HTMLParser(encoding="utf-16") #As characters are beyond utf-8 
tree = etree.HTML(content,parser = myparser) 
review = tree.xpath(".//*[@id='productReviews']/tr/td[1]/div[1]/text()") 

這是返回一個空列表。

但是,當我改變代碼:

myparser = etree.HTMLParser(encoding="utf-8") #Neglecting some reviews having ascii character above utf-8 
tree = etree.HTML(content,parser = myparser) 
review = tree.xpath(".//*[@id='productReviews']/tr/td[1]/div[1]/text()") 

現在我用同樣的XPath得到正確的數據。 但大多數評論被拒絕。 那麼這是基於lxml的xpath或我的xpath實現的問題?

我該如何解析utf-16編碼的上述頁面?

+1

我認爲你應該使用'tree.xpath(」 .//*[@ ID = 'productReviews']/TR/TD [1]/DIV /文()「)'。此外,http://www.amazon.de/product-reviews/B004K1K172在ISO-8859-15中編碼,但不在utf-16中編碼。 – nymk 2013-03-05 11:58:42

+0

xpath只用於選擇第一個review.Code通過更改最後一個div [n] value來繼續循環查看評論。我將使用ISO-8859-15編碼檢查lxml xpath。 – Kratos85 2013-03-05 14:15:27

+0

@ nymk.Thanks的建議。現在我能夠使用ISO-8859-15編碼成功解析頁面。 – Kratos85 2013-03-06 08:40:49

回答

0

根據nymk的建議

使用ISO-8859-15編碼解析頁面。因此在代碼中更改以下行。

myparser = etree.HTMLParser(encoding =「ISO-8859-15」)
但是,必須在SQL中進行更改才能接受utf-8以外的編碼。

0

要想從HTTP頭中的字符編碼自動:

import cgi 
import urllib2 

from lxml import html 

response = urllib2.urlopen("http://www.amazon.de/product-reviews/B004K1K172") 

# extract encoding from Content-Type 
_, params = cgi.parse_header(response.headers.get('Content-Type', '')) 
html_text = response.read().decode(params['charset']) 

root = html.fromstring(html_text) 
reviews = root.xpath(".//*[@id='productReviews']/tr/td[1]/div[1]/text()")