1

feedparserRSSフィードをテストしています。それは魅力のように機能し、私はすべてのエントリを取得します。

一部のニュースにはYouTubeプレーヤーが組み込まれていますが、これはfeedparserの戻り値には表示されません。

私のコードは単純です:

d = feedparser.parse('http://feeds.feedburner.com/NotciasPs3evita-Mypst')

これは(抜粋)を返します:

 guidislink': False,
          'id': u'http://mypst.com.br/forum/index.php?/topic/17336-gamegen-call-of-duty-black-ops-2-ganha-trailer-com-acao-real-e-muitas-surpresas/',
          'link': u'http://mypst.com.br/forum/index.php?/topic/17336-gamegen-call-of-duty-black-ops-2-ganha-trailer-com-acao-real-e-muitas-surpresas/',
          'links': [{'href': u'http://mypst.com.br/forum/index.php?/topic/17336-gamegen-call-of-duty-black-ops-2-ganha-trailer-com-acao-real-e-muitas-surpresas/',
                     'rel': u'alternate',
                     'type': u'text/html'}],
          'published': u'Mon, 29 Oct 2012 14:53:58 +0000',
          'published_parsed': time.struct_time(tm_year=2012, tm_mon=10, tm_mday=29, tm_hour=14, tm_min=53, tm_sec=58, tm_wday=0, tm_yday=303, tm_isdst=0),
          'summary': u'A Activision revelou hoje um novo trailer de Call of Duty: Black Ops 2, substituindo as cenas de a\xe7\xe3o do jogo por cenas de a\xe7\xe3o na vida real. O trailer traz diversas \u201csurpresas\u201d e alguns zumbis.<br />\n<br />\n<br />\n<br />\nCall of Duty: Black Ops 2 chegar\xe1 no dia 13 de novembro nos Estados Unidos.<br />\n<br />\n<br />\n<em class="bbc"><strong class="bbc">Fonte: <a class="bbc_url" href="http://www.gamegen.com.br/playstation3/call-of-duty-black-ops-2-ganha-trailer-com-acao-real-e-muitas-surpresas/" rel="nofollow external" title="Link externo">GameGeneration</a></strong></em>',
          'summary_detail': {'base': u'http://feeds.feedburner.com/NotciasPs3evita-Mypst',
                             'language': None,
                             'type': u'text/html',
                             'value': u'A Activision revelou hoje um novo trailer de Call of Duty: Black Ops 2, substituindo as cenas de a\xe7\xe3o do jogo por cenas de a\xe7\xe3o na vida real. O trailer traz diversas \u201csurpresas\u201d e alguns zumbis.<br />\n<br />\n<br />\n<br />\nCall of Duty: Black Ops 2 chegar\xe1 no dia 13 de novembro nos Estados Unidos.<br />\n<br />\n<br />\n<em class="bbc"><strong class="bbc">Fonte: <a class="bbc_url" href="http://www.gamegen.com.br/playstation3/call-of-duty-black-ops-2-ganha-trailer-com-acao-real-e-muitas-surpresas/" rel="nofollow external" title="Link externo">GameGeneration</a></strong></em>'},
          'title': u'[GameGen] Call of Duty: Black Ops 2 ganha trailer com a\xe7\xe3o real e muitas surpresas',
          'title_detail': {'base': u'http://feeds.feedburner.com/NotciasPs3evita-Mypst',
                           'language': None,
                           'type': u'text/plain',
                           'value': u'[GameGen] Call of Duty: Black Ops 2 ganha trailer com a\xe7\xe3o real e muitas surpresas'}},

<object>YouTubeプレーヤータグを除いてすべてが整っています。これはフィードパーサーのバグですか、それともrssの問題ですか?これを行うためのPython上の他のライブラリはありますか?

4

2 に答える 2

5

feedparserはHTML入力とをサニタイズし、<object>タグはデフォルトで削除されます。<param><embed>

サニタイズを無効にするか(ソースを本当に信頼している場合のみ)、YouTubeタグをホワイトリストに登録する必要があります。

サニタイズを無効にするにはSANITIZE_HTML、Falseに設定します。

feedparser.SANITIZE_HTML = False

ホワイトリストに追加するには、_HTMLSanitizer.acceptable_elementsセットに要素を追加します。

_HTMLSanitizer.acceptable_elements.update(['object', 'param', 'embed'])

どちらの方法にも固有のリスクがあり、この方法で攻撃を受ける可能性があります。私が使用するアプローチは、サニタイズを完全に切り替えることですが、HTMLをサニタイズするために他の方法lxml.html.cleanを使用します。おそらく、ホワイトリストを使用してYouTubeをにリストしhost_whitelistます。

于 2012-10-29T17:10:16.677 に答える
1

上記の解決策に応じて、最近SANITIZE_HTML設定がfeedparser.apiの下に移動したように見えます。

feedparser.api.SANITIZE_HTML = False
feedparser.api.mixin.SANITIZE_HTML = False
于 2015-10-20T18:55:49.823 に答える