0

次のページを解析しています: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エンコーディングで解析するにはどうすればよいですか?

4

2 に答える 2

0

nymk の提案に基づいて、

ISO-8859-15 エンコーディングを使用してページを解析しました。したがって、コード内の次の行を変更します。

myparser = etree.HTMLParser(encoding="ISO-8859-15")
ただし、utf-8 以外のエンコーディングを受け入れるように SQL を変更する必要があります。

于 2013-03-06T08:45:01.290 に答える
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()")
于 2013-03-06T09:45:51.950 に答える