解決したいこと
オライリー・ジャパンの「Pythonによるwebスクレイピング第2版」のコードを編集して試してみたところ、UnicodeEncodeErrorエラーが発生しました。
解決方法を教えて下さい。
発生している問題・エラー
UnicodeEncodeError: 'ascii' codec can't encode characters in position 10-15: ordinal not in range(128)
該当するソースコード
python3
1import io,sys 2sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') 3 4from urllib.request import urlopen 5from bs4 import BeautifulSoup 6import datetime 7import random 8import re 9 10random.seed(datetime.datetime.now()) 11def getLinks(articleUrl): 12 html = urlopen('http://ja.wikipedia.org{}'.format(articleUrl)) 13 bs = BeautifulSoup(html, 'html.parser') 14 return bs.find('div', {'id':'bodyContent'}).find_all('a', href=re.compile('^(/wiki/)((?!:).)*$')) 15 16links = getLinks('/wiki/アンパンマン') 17while len(links) > 0: 18 newArticle = links[random.randint(0, len(links)-1)].attrs['href'] 19 print(newArticle) 20 links = getLinks(newArticle)
自分で試したこと
エラーコードを検索した結果解決策として出てきた
(https://hodalog.com/about-unicodeencodeerror-using-japanese-in-python-code/)
ため、コードの文頭に
import io,sys sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
を追加しました。それでも同様のエラーが起きるため、同サイトと自分のコードとの条件を比較したところおそらくhttpがエラーの原因となっているのではと考察しましたが、解決の糸口はつかめませんでした。
元のコードは、英語のwikipediaの任意のページからランダムに項目リンクを見つけ、そこからhref属性を抽出し、ページを出力し、抽出したURLから新たなリンクのリストを取り出し、またループするというものです。これと同じ動きを日本語でも実装したいです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/07 01:00
2021/12/07 01:14
2021/12/07 02:05 編集
2021/12/07 02:06