質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

解決済

Unicodeエスケープシーケンスを変換したい

34Noe
34Noe

総合スコア2

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

1回答

0評価

1クリップ

665閲覧

投稿2022/04/01 07:20

編集2022/04/02 13:17

実現したいこと

取得した文字列をデコードしたい。

生じている問題

スクレイピングによって取得した文字列がUnicodeエスケープシーケンスで記述されており、これをデコードするためのコードを実行したところエラーが表示されました。

当該のソースコード

Python3.10.1

mport stweet as st def try_serch(): search_tweets_task = st.SearchTweetsTask(all_words = "検索ワード") output_jl_tweets = st.JsonLineFileRawOutput('data.txt') output_print = st.PrintRawOutput() st.TweetSearchRunner(search_tweets_task=search_tweets_task, tweet_raw_data_outputs=[output_print, output_jl_tweets], user_raw_data_outputs=[]).run() if __name__ == "__main__": try_serch()

Python3.10.1

source = open('data.txt','r') out = open('data_decoded.txt','w') for row in source: new = row.encode().decode('unicode-escape') out.write(new) source.close() out.close()

エラー

utf-8変換前

Traceback (most recent call last): File "c:\VSCode\Source\Python\Scraping\Encoder.py", line 6, in <module> out.write(new) UnicodeEncodeError: 'cp932' codec can't encode character '\ud83d' in position 266: illegal multibyte sequence

変換後

Traceback (most recent call last): File "c:\VSCode\Source\Python\Scraping\Encoder.py", line 6, in <module> out.write(new) UnicodeEncodeError: 'utf-8' codec can't encode characters in position 266-267: surrogates not allowed

作成されたテキストファイルの変換したい部分

"full_text" : "\u3053\u308C\u306F\u30C6\u30B9\u30C8"

このような記述がされており、その一部分である\ud83dが引っかかったようです。

特に分からないこと

utf-8とcp932の食い違いであるということは記事を読んで理解できました。そのためファイルの読み書き時にutf-8でコーディングを行ってみましたが上手く動きません。どこを見落としているのでしょうか?

Python

source = open('data.txt','r',encoding='utf-8') out = open('data_decoded.txt','w',encoding='utf-8')

至らない点が多々あると思いますが、ご回答よろしくお願いします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

quickquip

2022/04/01 07:33

Tracebackがないのでどこでエラーがでたのかわかりません。 utf-8にした場合も「上手く動きません」とだけあって何が起こったのかわかりません。 今Pythonを使ってファイル開けていない状態で、「Unicodeエスケープシーケンスで記述されて」いると思ったのはなぜか(なにを使ってどうなったからそう判断したのか)もあるとよいと思います。 結果から考えると単純に「そのファイルはテキストではない」可能性が高そうなのですが、ファイルはどのようにして作られたのでしょうか?
34Noe

2022/04/01 07:48

情報不足で申し訳ありません。 テキストファイルを作成するのはstweetを使用した以下のコードなのですが、 import stweet as st def try_serch(): search_tweets_task = st.SearchTweetsTask(all_words = "検索ワード") output_jl_tweets = st.JsonLineFileRawOutput('data.txt') output_print = st.PrintRawOutput() st.TweetSearchRunner(search_tweets_task=search_tweets_task, tweet_raw_data_outputs=[output_print, output_jl_tweets], user_raw_data_outputs=[]).run() if __name__ == "__main__": try_serch() これによって作成されたファイルdata.txtを確認すると検索ワードに引っかかった文字列が、Unicodeエスケープシーケンスでテキストファイル内に記述されていたためそう判断しました。 またutf-8に変換前は Traceback (most recent call last): File "c:\VSCode\Source\Python\Scraping\Encoder.py", line 6, in <module> out.write(new) UnicodeEncodeError: 'cp932' codec can't encode character '\ud83d' in position 266: illegal multibyte sequence 返還後は Traceback (most recent call last): File "c:\VSCode\Source\Python\Scraping\Encoder.py", line 6, in <module> out.write(new) UnicodeEncodeError: 'utf-8' codec can't encode characters in position 266-267: surrogates not allowed となりました。
quickquip

2022/04/01 08:22 編集

情報はこの欄ではなくて質問を編集して追記してください。 > これによって作成されたファイルdata.txtを確認すると検索ワードに引っかかった文字列が、Unicodeエスケープシーケンスでテキストファイル内に記述されていたため テキストエディタで見ると全部ASCIIの範囲の文字になっていて、中に \ud83d という文字列が見えるということで合ってますか。 追記: \ud83d は今エラーになっている部分で、これを検索すると本当にそこにあるのかと思って書きました。
34Noe

2022/04/01 08:43

編集した部分のような文字列が表示され、その中に\ud83dという文字列が含まれていました。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。