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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Python 3.x

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

文字コード

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

1453閲覧

python3でスクレイピングしたデータをテキストファイルにすると文字化けする

makotana

総合スコア1

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Python 3.x

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

文字コード

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/12/10 08:00

編集2020/12/10 08:50

前提・実現したいこと

市販の書籍のサンプルコードを使用し、ウェブサイトから情報を抜き出し、テキストファイルとして書き出すという処理を行ったのですが、テキストファイルの日本語部分が文字化けしてしまいます。
対処法を教えていただきたいです。よろしくお願いします。

発生している問題・エラーメッセージ

Traceback (most recent call last): File "C:/Users/backp/Desktop/pycon.py", line 22, in <module> f.write('{0:<10}| {1}\n'.format(language, title)) UnicodeEncodeError: 'cp932' codec can't encode character '\xe6' in position 13: illegal multibyte sequence

該当のソースコード

python3.9.0

1import requests 2from bs4 import BeautifulSoup 3 4result = requests.get('https://pycon.jp/2016/ja/schedule/talks/list/') 5soup = BeautifulSoup(result.text, 'html.parser') 6presentation_html_list = soup.find_all('div', class_='presentation') 7 8with open('pyconjp-2016-talks.txt', 'w') as f: 9 f.write('{0:<10}| {1}\n'.format('language', 'title')) 10 f.write('{0:<10}| {0}\n'.format('---------')) 11 12 for presentation_html in presentation_html_list: 13 presentation_title = presentation_html.h3.get_text() 14 15 if '(en)' in presentation_title: 16 language = 'English' 17 title = presentation_title.replace('\xa0(en)','') 18 elif '(ja)' in presentation_title: 19 language = 'Japanese' 20 title = presentation_title.replace('\xa0(ja)','') 21 22 f.write('{0:<10}| {1}\n'.format(language, title)) 23 24

試したこと

with open('pyconjp-2016-talks.txt', 'w', encoding='utf-8') as f: ```と文字コードを指定したところエラーは表示されなくなりましたが、文字化けしたテキストファイルになってしまいます。 ```ここに言語を入力 # -*- coding: utf-8 -*- ```を先頭につけても文字化けしたままでした ```ここに言語を入力 language | title --------- | --------- Japanese | [招待講演 / Invited Talk] Pythonを含む多くのプログラミング言語を扱う処理フレームワークとパターン Japanese | Blockchain for Pythonistas Japanese | マイクロサービスを利用する側のパフォーマンス向上策 Japanese | 週末サイエンティストのススメ Japanese | Pythonで作るWebクローラ入門 Japanese | Pythonで作るTiny DAW (Digitai Audio Workstation) Japanese | たった一ファイルの python スクリプトから始める OSS 開発入門 Japanese | データ分析スクリプトのツール化入門(GUI付与・EXE化) English | Mezzanine, the best CMS on Python English | Getting started with chatops in python with errbot Japanese | ニューラルネットワークのフレームワークであるChainerで始める対話Botの作成 English | Building a Simple Japanese Content-Based Recommender System in Python Japanese | 数学的基礎から学ぶ Deep Learning Japanese | 仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 Japanese | パッケージングを支える技術 Japanese | 基礎から学ぶWebアプリケーションフレームワークの作り方 Japanese | Pythonistaよ、Pythonistaを知っているか 〜こんなの欲しかった! iOSアプリ開発環境Pythonista〜 Japanese | 複数の言語からなるプロジェクトを作るということ Japanese | 無料でできる、Cloud9上で開発してHerokuにデプロイする手順を共有します English | How Python helped create the visual effects for an Emmy nominated TV show Japanese | [招待講演 / Invited Talk] 確率的ニューラルネットの学習と Chainer による実装 Japanese | Robot Frameworkでブラウザテストやってみた話 Japanese | Pythonではじめるfinance hack入門 English | You Might Not Want Async (in Python) Japanese | Pythonでpyftpdlibを使ってFTPサーバーを作る際に使ったテクニックの紹介 Japanese | PythonでもPythonじゃなくても使える汎用的なMicroservice実行環境 Japanese | f2pyとmatplotlibを用いたブラウン粒子動力学のリアルタイム可視化 Japanese | Pythonで実現する4コマ漫画の分析・評論 Japanese | HTTPプロクシライブラリproxy2の設計と実装 Japanese | Raspberry Piで日本の子供たちにプログラミングのパッションを伝えよう English | Deep Learning with Python & TensorFlow Japanese | ビッグデータとPythonではじめる野球の統計分析 Japanese | Pythonで入門するApache Spark English | import community English | Building Distributed System with Celery on Docker Swarm Japanese | Python を支える技術: モジュール・インポートシステム編 Japanese | Plone5のOSSにおける進化と適応 〜 PyCon (US) 2016 Keynoteの日本語での再演 Japanese | メタプログラミングPython Japanese | はじめて作るDjangoプラグイン Japanese | PythonではじめるOpenAI Gymトレーニング Japanese | pandasによる時系列データ処理 English | Building An Interpreter In RPython Japanese | Pausable Unittest on EFI Stackless Python English | Building a data preparation pipeline with Pandas and AWS Lambda Japanese | Python データーベースドライバーの作り方 Japanese | 型ヒントについて考えよう! English | Sleepy: How to suspend and resume your cpython process from inside

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

result = requests.get('https://pycon.jp/2016/ja/schedule/talks/list/')
の後で
result.encoding
を見てください。utf-8でないでしょう。
そこで、
result = requests.get( ・・・
のあとに
result.encoding = 'utf-8'
を追加してください。
するとよい結果が見えると思います。

投稿2020/12/10 09:57

ikapy

総合スコア1167

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

makotana

2020/12/10 10:19

解決できました!本当にありがとうございます! なるほど、requests.get()の時点でエンコーディングが違ったんですね!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問