前提・実現したいこと
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/ツールのバージョンなど)
回答2件
あなたの回答
tips
プレビュー