1

元のエンコーディングを使用すると、保存したファイルが正しく表示されないという問題があります。

Web ページをダウンロードして、必要なコンテンツを検索し、そのコンテンツをファイルに書き込んでいます。

サイトのエンコーディングは 'iso-8859-1' か、クロムと美しいスープが教えてくれます。元のサイトでそのエンコーディングを使用して表示すると、完全に表示されます。

ページをダウンロードして表示しようとすると、次のような奇妙な文字 (HTML エンティティ?) が表示されます。

“ , ’

保存したページを表示するときに Chrome のエンコーディングを手動で「Utf-8」に設定すると、元のページと同様に「Utf-8」に設定すると正常に表示されます。

これをどうすればよいかわかりません。テキストをファイルに書き込む前にエンコーディングを変更しますが、それを試みるとASCIIエラーが発生します。

サンプル ページは次のとおりです (アダルト コンテンツの可能性があります)。

http://original.adultfanfiction.net/story.php?no=600106516

そして、ページからテキストを取得するために使用しているコード:

    site = requests.post(url, allow_redirects=False)

    html = site.text

    soup = BeautifulSoup(html)

    rawStory = soup.findAll("td",{"colspan" : '3'})

    story = str(rawStory)

    return story

ResultSet を文字列に変換して、ファイルに書き込むことができるようにします。それが問題の一部であるかどうかはわかりません。html を要求した後、何かを実行する前にコンソールに出力すると、それが表示されます。コンソールでも不適切です。

4

1 に答える 1

0

あなたの問題は、BeautifulSoup に UTF-8 フラグメントを要求し、それを ISO-8859-1 として使用しようとしているだけだと 90% 確信していますが、これは明らかに機能しません。ドキュメントは、これらすべてを非常にうまく説明しています。

を呼び出していますstr非きれいな印刷が説明するように:

文字列だけが必要な場合は、凝った書式設定なしで、BeautifulSoup オブジェクト、またはその中の Tag で unicode() または str() を呼び出すことができます。このstr()関数は、UTF-8 でエンコードされた文字列を返します。

出力エンコーディングが説明するように:

Beautiful Soup からドキュメントを書き出すと、ドキュメントが最初は UTF-8 ではなかったとしても、UTF-8 ドキュメントが取得されます。

次に、Latin-1 HTML ドキュメントを解析し、UTF-8 として書き戻すという、ほぼ正確に行っていることの例を示し、すぐに修正方法を説明します。

UTF-8 が必要ない場合は、エンコードを prettify() に渡すことができます…また、BeautifulSoup オブジェクトまたはスープ内の任意の要素に対して、まるで Python 文字列であるかのように、encode() を呼び出すこともできます…</ p>

それで、それはあなたがしなければならないすべてです。


ただし、そこにたどり着く前に別の問題があります。を呼び出すと、タグは返されず、基本的にタグのリストである がfindAll返されます。ResultSet文字列のリストを呼び出すstrと、文字列自体ではなく、ブラケット、コンマ、および各文字列の repr (印刷できない ASCII 文字の無関係な引用符とバックラッシュ エスケープを含む)が得られるのと同じようstrに、 a を呼び出すと、ResultSet同様の結果が得られます。Tagそして明らかに、 でメソッドを呼び出すことはできませんResultSet


最後に、あなたが実際に解決しようとしている問題が何であるかはわかりません。HTML フラグメントを作成しています。フラグメントが有効なドキュメントではないという事実を無視し、ブラウザは厳密に言えばそもそもそれを表示すべきではありません。エンコーディングを指定していません。つまり、ブラウザは帯域外からのみその情報を取得できます。メニュー項目を選択するのと同じように配置します。これを Latin-1 に変更しても実際には「修正」されません。メニューで Latin-1 を選択すると正しい表示が得られ、UTF-8 を選択すると間違った表示が得られるようになるだけです。Chrome をだまして推測させたいものを推測させる方法を見つけようとするのではなく、実際にメタ http-equiv を持つ完全な HTML ドキュメントを実際に作成してみてください。

于 2013-08-31T01:05:14.433 に答える