【发布时间】:2013-02-19 17:14:13
【问题描述】:
我正在解析以下页面:http://www.amazon.de/product-reviews/B004K1K172 使用基于 lxml 的 etree 进行解析。
包含整个页面内容的内容变量
代码:
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 编码解析上述页面?
【问题讨论】:
-
我认为你应该使用
tree.xpath(".//*[@id='productReviews']/tr/td[1]/div/text()")。此外,amazon.de/product-reviews/B004K1K172 以 ISO-8859-15 编码,而不是 utf-16。 -
xpath 只是用于挑选第一个评论。代码通过更改最后一个 div[n] 值来循环查看评论。我将使用 ISO-8859-15 编码检查 lxml xpath。
-
@nymk。感谢您的建议。现在我可以使用 ISO-8859-15 编码成功解析页面。
标签: python parsing xpath lxml utf-16