ブクマされても通知が来ない日々が続いておりますが皆様いかがお過ごしですか?
このままだと
にゃーん😺
で死ぬwww
open()関数に encoding キーワード引数を与えてやると、自動変換で使用される文字コードを直接指定することができますから、これを Unicode 文字が表現できる UTF-8 等にしてやればいいわけです。
# UTF-8 を指定してファイルを出力する
Python エラー'cp932' codec can't encode character - スタック・オーバーフロー
f = open('all_names.csv', 'w', encoding='UTF-8')
というわけで対応した。
open書いたらすぐ文字コード! って思えるようにならんと駄目よねー。
コード
# -*- coding:utf-8 -*- import urllib import requests import json from lxml import etree import datetime as dt def HtmlOutput (bmInfos): f = open('三日はてブ.html','wt', encoding='UTF-8') f.write('<html><body><table>') f.write('<tr><th>★</th><th>URL</th><th>ユーザー</th><th>日付</th><th>コメント</th>\n') for b in bmInfos: bUrl = b['url'].replace("http://", "") bUrl = b['url'].replace("https://", "s/") bUrl = urllib.parse.quote(bUrl) f.write('<tr>') f.write('<td>') if b['star']==1: f.write('★') f.write('</td>') f.write('<td><a href="http://b.hatena.ne.jp/entry/' + bUrl + '" target="_blank">' + b['url'] + '</a></td><td>' + \ b['user'] + '</td><td>' + b['date'].strftime("%Y/%m/%d") + '</td><td>' + b['comment'] + '</td>') f.write('</tr>\n') f.write('</table></body></html>') f.close() def GetImgIndex(time, eid, user): #URL作成 url = "http://b.hatena.ne.jp/" + user + "/" url = url + time.strftime("%Y%m%d") url = url + "#bookmark-" + str(eid) url = urllib.parse.quote(url) headers = {'User-Agent': 'Sample Header'} r = requests.get("http://s.hatena.com/entry.json?uri=" + url, headers=headers).json() for st in r['entries']: for st2 in st['stars']: if st2['name'] == myId: return 1 return 0 myStr="elve.club" myId = "elve" #myStr = input("検索したいurl: ") #myId = input("あなたのはてなID: ") r = requests.get("http://b.hatena.ne.jp/search/text?safe=off&q=" + urllib.parse.quote(myStr) + "&users=1&mode=rss").text r = r.encode('utf-8') root = etree.fromstring(r) links = root.findall(".//{http://purl.org/rss/1.0/}link") #links = root.xpath('link', namespaces={'rss','{http://purl.org/rss/1.0/}'}) bmInfos=[] for link in links: if link != links[0]: headers = {'User-Agent': 'Sample Header'} json = requests.get("http://b.hatena.ne.jp/entry/jsonlite/?url=" + link.text, headers=headers).json() try: for bm in json['bookmarks']: tdatetime = dt.datetime.strptime(bm['timestamp'], '%Y/%m/%d %H:%M') if tdatetime > (dt.datetime.now() - dt.timedelta(days=10)): bmInfo={"star":0,"url":json['url'],"user":bm['user'], "date":tdatetime,"comment":bm['comment']} bmInfo["star"] = GetImgIndex(tdatetime, json['eid'], bm['user']) bmInfos.append(bmInfo) else: break except: print("ERR!!") break HtmlOutput(bmInfos) print("END")