2

Web ページから RSS リンクを印刷する必要がありますが、このリンクが正しくデコードされません。これが私のコードです:

import urllib2
from lxml import html, etree
import chardet

data = urllib2.urlopen('http://facts-and-joy.ru/')
S=data.read()
encoding = chardet.detect(S)['encoding']
#S=S.decode(encoding)
#encoding='utf-8'

print encoding
parser = html.HTMLParser(encoding=encoding)
content = html.document_fromstring(S,parser)
loLinks = content.xpath('//link[@type="application/rss+xml"]')

for oLink in loLinks:
    print oLink.xpath('@title')[0]
    print etree.tostring(oLink,encoding='utf-8')

ここに私の出力があります:

utf-8
Позитивное мышление RSS Feed
<link rel="alternate" type="application/rss+xml" title="&#x41F;&#x43E;&#x437;&#x438;&#x442;&#x438;&#x432;&#x43D;&#x43E;&#x435; &#x43C;&#x44B;&#x448;&#x43B;&#x435;&#x43D;&#x438;&#x435; RSS Feed" href="http://facts-and-joy.ru/feed/" />&#13;

タイトルの内容はそれ自体で正しく表示されましたが、tostring() 内で奇妙な &#... 記号に置き換えられました。リンク要素全体を正しく印刷するにはどうすればよいですか?

よろしくお願いします。

4

1 に答える 1

2

これは、機能するプログラムの簡略化されたバージョンです。

from lxml import html

url = 'http://facts-and-joy.ru/'
content = html.parse(url)
rsslinks = content.xpath('//link[@type="application/rss+xml"]')

for link in rsslinks:
    print link.get('title')
    print html.tostring(link, encoding="utf-8")

出力:

Позитивное мышление RSS Feed
<link rel="alternate" type="application/rss+xml" title="Позитивное мышление RSS Feed" href="http://facts-and-joy.ru/feed/">&#13;

決定的なラインは

print html.tostring(link, encoding="utf-8")

元のプログラムで変更する必要があるのは、これだけです。

html.tostring()代わりに使用するとetree.tostring()、数値文字参照の代わりに実際の文字が生成されます。を使用することもできますetree.tostring(link, method="html", encoding="utf-8")

「html」と「xml」の出力方法にこのような違いがある理由は明らかではありません。lxml メーリング リストへのこの投稿には返信がありませんでした: https://mailman-mail5.webfaction.com/pipermail/lxml/2011-September/006131.html .

于 2013-10-03T20:54:33.590 に答える