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

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

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

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

Q&A

解決済

2回答

10751閲覧

このエラーコードの意味を教えて下さい!

noukanaruo

総合スコア1

Python

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

0グッド

0クリップ

投稿2021/03/05 05:04

編集2021/03/05 05:42

前提・実現したいこと

pythonの勉強を始めたばかりのものです。
「文系でもわかるプログラミング副業入門」という本を読み、
メルカリやラクマから最安値をスクレイピングする課題に取り組んでいます。
その中で「UnicodeEncodeError: 'latin-1' codec can't encode characters in position 120-125: ordinal not in range(256)」というエラーに遭遇し、前に進めなくなりました。
このエラーは何を意味しているのでしょうか?

不勉強で申し訳ございませんが、ご教授お願い致します。

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

Traceback (most recent call last): File "kakaku_scraping.py", line 18, in <module> response = requests.get(url, headers = USER_AGENT) File "/opt/anaconda3/lib/python3.8/site-packages/requests/api.py", line 76, in get return request('get', url, params=params, **kwargs) File "/opt/anaconda3/lib/python3.8/site-packages/requests/api.py", line 61, in request return session.request(method=method, url=url, **kwargs) File "/opt/anaconda3/lib/python3.8/site-packages/requests/sessions.py", line 530, in request resp = self.send(prep, **send_kwargs) File "/opt/anaconda3/lib/python3.8/site-packages/requests/sessions.py", line 643, in send r = adapter.send(request, **kwargs) File "/opt/anaconda3/lib/python3.8/site-packages/requests/adapters.py", line 439, in send resp = conn.urlopen( File "/opt/anaconda3/lib/python3.8/site-packages/urllib3/connectionpool.py", line 670, in urlopen httplib_response = self._make_request( File "/opt/anaconda3/lib/python3.8/site-packages/urllib3/connectionpool.py", line 392, in _make_request conn.request(method, url, **httplib_request_kw) File "/opt/anaconda3/lib/python3.8/http/client.py", line 1255, in request self._send_request(method, url, body, headers, encode_chunked) File "/opt/anaconda3/lib/python3.8/http/client.py", line 1296, in _send_request self.putheader(hdr, value) File "/opt/anaconda3/lib/python3.8/http/client.py", line 1228, in putheader values[i] = one_value.encode('latin-1') UnicodeEncodeError: 'latin-1' codec can't encode characters in position 120-125: ordinal not in range(256)

該当のソースコード

python

1from time import sleep 2import bs4 3import requests 4 5 6MERCARI = ['メルカリ','https://www.mercari.com/jp/search/?sort_order=price_asc&keyword=%E3%83%AB%E3%83%B3%E3%83%90980&category_root=7&category_child=101&category_grand_child%5B875%5D=1&brand_name=&brand_id=&size_group=&price_min=&price_max=&item_condition_id%5B1%5D=1&status_on_sale=1','<p class="search-result-description">該当する商品が見つかりません。検索条件を変えて、再度お試しください。</p>'] 7 8RAKUMA = ['ラクマ','https://fril.jp/s?order=asc&query=%E3%83%AB%E3%83%B3%E3%83%90980&sort=sell_price&status=new&transaction=selling','body > div.drawer-overlay > div > div > div > div > div > div.search_tab > section > div.content > section > div:nth-child(1) > div > div.item-box__text-wrapper > div:nth-child(3) > p > span:nth-child(2)',''] 9 10QUERY_INFOS = [MERCARI,RAKUMA] 11 12 13USER_AGENT = {"USER_AGENT": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.192 Safari/537.36表示サイズ: 1420 x 707pix"} 14 15for info in QUERY_INFOS : 16 sleep(2) 17 url = info[1] 18 response = requests.get(url, headers = USER_AGENT) 19 response.encoding = response.apparent_encoding 20 html = response.text 21 soup = bs4.BeautifulSoup(html, 'html.parser') 22 23 try : 24 #商品が見つかったかどうかのチェック 25 if info[3] != '' : 26 if soup.select(info[3]) : 27 raise ValueError() 28 #価格を抜き出す 29 prices = soup.select(info[2]) 30 print(info[0] + ':' + prices[0].getText()) 31 except : 32 #商品が見つからなかったことを表示 33 print(info[0] + ':見つかりませんでした。'

試したこと

一通りスペルはチェックしました。
抜け漏れあるかもしれません、、、

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

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

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

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

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

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

K_3578

2021/03/05 05:10

まず質問する前に検索してみましたか? この手のエラーは先駆者が通った道なので大体調べれば意味はわかります。
TakaiY

2021/03/05 05:15

エラーは最後の行だけでなく、前の部分を含めた全てを貼ってください&自分で内容を確認してください。 そのエラーがどこで発生したのかがわかる情報が含まれています。
noukanaruo

2021/03/05 05:16

回答ありがとうございます。 一応検索してみたのですが、理解力不足で余計分からなくなりました。 もう少し調べてみます!
noukanaruo

2021/03/05 05:18

前の部分も含めて内容確認してみます!
miyabi_takatsuk

2021/03/05 05:38

エラー文を翻訳にかけてみましたか? 検索してもわからなければ、翻訳にかけてみると、理解できる可能性があります。
noukanaruo

2021/03/05 05:43

ありがとうございます! 全文を翻訳して読み解いていきます。
guest

回答2

0

ベストアンサー

エラーの意味は K_3578 さんが提示されていますので、考えられる要因の方を挙げておきます。

Python

1USER_AGENT = {"USER_AGENT": "Mozilla/5.0 ... 表示サイズ ..."}

と漢字の入った USER_AGENT を requests.get() の headers に指定しています。

Python

1USER_AGENT = {"USER_AGENT": "Mozilla/5.0 ... 表示サイズ ...".encode()} # .encode('utf_8') と同じ

等の encode が必要なのではありませんか。

投稿2021/03/05 06:19

lehshell

総合スコア1147

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

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

noukanaruo

2021/03/05 06:35

lenshell様 ご回答ありがとうございます。 ご指摘の通り修正いたしましたところ 無事エラーも出ず、思った通りの結果が出力されました! 本当にありがとうございます! 質問する以前のことも多く、お手数おかけしました。 以後気をつけて、pythonを学んでいけたらと思います。 ありがとうございました。
guest

0

私はPythonは詳しくないのであくまでエラーコード出たときの対処ですが
まず、Google翻訳とかに掛けてみる。今回出ているエラーコードを掛けてみました。

UnicodeEncodeError: 'latin-1'コーデックは位置120-125の文字をエンコードできません:序数がrange(256)にありません

と出ました。これは私が無知なだけかもしれませんがよくわかりませんね。なのでエラーメッセージを切り分けて検索してみます。

UnicodeEncodeError検索してみた所、沢山先駆者の記事が出てきました。
イメージ説明
この辺が参考になりそうですね。では自分で読んで調べてみましょう。

投稿2021/03/05 05:23

K_3578

総合スコア1282

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問