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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1761閲覧

pythonでリストの中の文字化けが直りません

sususu

総合スコア99

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/12/08 13:06

編集2018/12/08 14:49

いつもご回答ありがとうございます。
下記のサイトでスクレイピングについて勉強しております。
https://qiita.com/taka-kawa/items/f0597b2f375da7ddbb73

import urllib.request as url_req from bs4 import BeautifulSoup from config import config, update_recent_article from slack_notification import slack_notify first_view = url_req.urlopen(config['web_info']['url']).read() soup = BeautifulSoup(first_view, "lxml") def extract_pick_up(soup=soup): """ 指定されたページのhtmlを読み込み、最新記事を抜粋してくる """ columns = soup.find_all("article", class_="post-list-item") return columns[0:13] def extract_url(column): """ columns @params: コラム コラムのurlを取得する """ column_html = BeautifulSoup(str(column), "lxml") url = column_html.find("a").get("href") return url def extract_title(column): """ columns @params: コラム コラムのタイトルを取得する """ column_html = BeautifulSoup(str(column), "lxml") title = column_html.find("h2").string return title def extract_update_article(columns): """ 更新された記事を抽出 更新前の最新の記事のindexはconfig.iniで管理 """ # 最新の記事番号を取得 recent_article = config['web_info']['recent_article'] # 更新された記事のurlを取得 article_list = [] update_start = False # 逆順に取得していき、最新記事の次からの記事のurlを取得 for column in reversed(columns): url = extract_url(column) # 記事番号取得 article_num = url.replace(config['web_info']['url']+"/", "") # タイトル取得 title = extract_title(column) # 取得すべきurl if update_start: article_list.append([title, url]) recent_article = article_num continue # 前回取得した最新の記事かどうか判定 if recent_article == article_num: update_start = True # config更新 update_recent_article(recent_article) if article_list == []: return [["更新記事はありません", "https://kintore.site"]] return article_list if __name__ == "__main__": columns = extract_pick_up() url = extract_url(columns[0]) article_list = extract_update_article(columns) slack_notify(text_="---プロたんの記事---", list_=article_list)

前回のスクレイピングで取得していない新着記事があった場合そのタイトルとURLをリストに入れてそれをスラックで通知するプログラムみたいです。
スクレイピング終了時のソースにプリント文を入れてリストの中身を表示しているのですが文字化けしてしまいます。

if __name__=="__main__": columns = extract_pick_up() url = extract_url(columns[0]) article_list = extract_update_article(columns) print str(article_list).decode('string-escape')←この行を追記したのですが文字化けします

print(article_list)を上記のように
print str(article_list).decode('string-escape')
に変更したことで『更新情報はありません』の文字化けは直りましたが、
新着記事があった場合のタイトル名は文字化けしたままです。

どなたかご回答いただけると幸いです。
よろしくお願いいたします。

文字化けを追記いたします。

[[u'100\u5747\u306e\u7b4b\u30c8\u30ec\u30b0\u30c3\u30ba\u304a\u3059\u3059\u3081TOP6\uff01\u81ea\u5b85\u30c8\u30ec\u30fc\u30cb\u30f3\u30b0\u3092\u5145\u5b9f\u3055\u305b\u3088\u3046', 'https://kintore.site/14354'], [u'\u7b4b\u30c8\u30ec\u3092\u3059\u308b\u3068\u30cf\u30b2\u308b!?\u7b4b\u30c8\u30ec\u3068\u629c\u3051\u6bdb\u306e\u95a2\u4fc2\u6027\u306e\u30a6\u30bd\u30fb\u30db\u30f3\u30c8', 'https://kintore.site/14376'], [u'\u5927\u81c0\u7b4b\u306e\u304a\u3059\u3059\u3081\u30c8\u30ec\u30fc\u30cb\u30f3\u30b0\uff15\u9078\uff01\u52b9\u679c\u7684\u306a\u935b\u3048\u65b9\u306b\u3064\u3044\u3066\u89e3\u8aac', 'https://kintore.site/14347'], [u'\u7b4b\u30c8\u30ec\u306b\u30de\u30a6\u30b9\u30d4\u30fc\u30b9\uff1f\u305d\u306e\u610f\u5916\u306a\u52b9\u679c\u3068\u5931\u6557\u3057\u306a\u3044\u305f\u3081\u306e\u9078\u3073\u65b9', 'https://kintore.site/14265'], [u'\u4e0b\u534a\u8eab\u75e9\u305b\u306b\u52b9\u304f\u98df\u4e8b\u30e1\u30cb\u30e5\u30fc\u3002\u4e0b\u534a\u8eab\u592a\u308a\u306e\u539f\u56e0\u306f\u30b3\u30ec\u3060\u3063\u305f\uff01', 'https://kintore.site/14263'], [u'\u7b4b\u30c8\u30ec\u306e\u547c\u5438\u6cd5\u3092\u7a2e\u76ee\u5225\u306b\u7d39\u4ecb\uff01\u610f\u8b58\u3059\u308b\u3060\u3051\u3067\u7b4b\u30c8\u30ec\u52b9\u679c\u304c\u5927\u5e45\u30a2\u30c3\u30d7', 'https://kintore.site/14531']]

2回目を動かすと更新情報がないので下記のように表示されるのですが文字化けしていません。

[['更新情報はありませんhttps://kintore.site']]

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

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

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

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

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

can110

2018/12/08 13:18

「タイトル名」とは提示ソースのどの変数のことでしょうか?
sususu

2018/12/08 14:29

コメントありがとうございます。参考にしたコードを張らせていただきました。上記のコードのarticle_list.append([title, url])の部分になります。すみませんがよろしくお願いいたします。
hayataka2049

2018/12/08 14:39

実際の文字化けしてる表示をご提示ください
sususu

2018/12/08 14:49

載せさせていただきました。よろしくお願いいたします。
can110

2018/12/08 14:57

article_listの中身が「[[u'100\u5747\u306e~」ということでしょうか?
guest

回答1

0

ベストアンサー

article_listはリストのようなので、以下のようにループでprintすれば文字化けしません。

Python

1article_list = [[u'100\u5747\u306e\u7b4b\u30c8\u30ec\u30b0\u30c3\u30ba\u304a\u3059\u3059\u3081TOP6\uff01\u81ea\u5b85\u30c8\u30ec\u30fc\u30cb\u30f3\u30b0\u3092\u5145\u5b9f\u3055\u305b\u3088\u3046', 'https://kintore.site/14354'], [u'\u7b4b\u30c8\u30ec\u3092\u3059\u308b\u3068\u30cf\u30b2\u308b!?\u7b4b\u30c8\u30ec\u3068\u629c\u3051\u6bdb\u306e\u95a2\u4fc2\u6027\u306e\u30a6\u30bd\u30fb\u30db\u30f3\u30c8', 'https://kintore.site/14376'], [u'\u5927\u81c0\u7b4b\u306e\u304a\u3059\u3059\u3081\u30c8\u30ec\u30fc\u30cb\u30f3\u30b0\uff15\u9078\uff01\u52b9\u679c\u7684\u306a\u935b\u3048\u65b9\u306b\u3064\u3044\u3066\u89e3\u8aac', 'https://kintore.site/14347'], [u'\u7b4b\u30c8\u30ec\u306b\u30de\u30a6\u30b9\u30d4\u30fc\u30b9\uff1f\u305d\u306e\u610f\u5916\u306a\u52b9\u679c\u3068\u5931\u6557\u3057\u306a\u3044\u305f\u3081\u306e\u9078\u3073\u65b9', 'https://kintore.site/14265'], [u'\u4e0b\u534a\u8eab\u75e9\u305b\u306b\u52b9\u304f\u98df\u4e8b\u30e1\u30cb\u30e5\u30fc\u3002\u4e0b\u534a\u8eab\u592a\u308a\u306e\u539f\u56e0\u306f\u30b3\u30ec\u3060\u3063\u305f\uff01', 'https://kintore.site/14263'], [u'\u7b4b\u30c8\u30ec\u306e\u547c\u5438\u6cd5\u3092\u7a2e\u76ee\u5225\u306b\u7d39\u4ecb\uff01\u610f\u8b58\u3059\u308b\u3060\u3051\u3067\u7b4b\u30c8\u30ec\u52b9\u679c\u304c\u5927\u5e45\u30a2\u30c3\u30d7', 'https://kintore.site/14531']] 2for a in article_list: 3 print a[0], a[1] 4""" 5100均の筋トレグッズおすすめTOP6!自宅トレーニングを充実させよう https://kintore.site/14354 6筋トレをするとハゲる!?筋トレと抜け毛の関係性のウソ・ホント https://kintore.site/14376 7大臀筋のおすすめトレーニング5選!効果的な鍛え方について解説 https://kintore.site/14347 8筋トレにマウスピース?その意外な効果と失敗しないための選び方 https://kintore.site/14265 9下半身痩せに効く食事メニュー。下半身太りの原因はコレだった! https://kintore.site/14263 10筋トレの呼吸法を種目別に紹介!意識するだけで筋トレ効果が大幅アップ https://kintore.site/14531 11"""

投稿2018/12/08 15:10

can110

総合スコア38266

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

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

sususu

2018/12/09 07:35

ご回答ありがとうございます!表示するときはループで表示するようにいたします。 しかしそのままリストを表示しても文字化け?してしまうのはなぜなのでしょうか? それともこれは文字化けではなく?参照番地を表示しているのでしょうか? 質問が多くて申し訳ございません。よろしくお願いいたします。
can110

2018/12/09 07:40

参照番地ではなく文字コードをそのまま出力しています。 リストをそのままprintした場合、pythonはリストの中身の文字列が、どんなエンコーディングで表現されたものか分からない/推測してくれないので文字コードのまま出力してしまいます。print(hoge[0])などのうようにすれば、標準出力のエンコーディングで出力するので人間に分かるものになります。
sususu

2018/12/09 07:56

エンコーディングの問題だったのですね!わかりやすい説明ありがとうございます! これからはリストを確認するときは教えていただいたやり方で確認したいと思います! ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問