Попробуйте:
cur.execute(
"UPDATE posts SET html = ? WHERE id = ?", (html ,temp[i][1]))
Используйте параметризованные аргументы, чтобы разрешить sqlite3 экранировать кавычки.(Это также помогает предотвратить SQL-инъекцию .)
Относительно ошибки ProgrammingError: html
должен быть объектом Unicode, а не string
объектом.Когда вы открываете URL:
response=urllib2.urlopen(str(temp[i][4]))
Посмотрите на заголовок типа контента:
content_type=response.headers.getheader('Content-Type')
print(content_type)
Это может сказать что-то вроде
'text/html; charset=utf-8'
, в этом случае вам следуетрасшифруйте строку html
с помощью кодека utf-8
:
html = response.read().decode('utf-8')
Это сделает html
объектом в кодировке Unicode и (мы надеемся) адресом ProgrammingError
.