【问题】

在执行代码时,提示上述错误,源码如下:

 # 下载小说...
def download_stoy(crawl_list,header): # 创建文件流,将各个章节读入内存
with open('E:\盗墓test22.txt', 'w') as f:
for each_url in crawl_list:
# 有的时候访问某个网页会一直得不到响应,程序就会卡到那里,我让他0.6秒后自动超时而抛出异常
while True:
try:
request = urllib.request.Request(url=each_url, headers=header)
with urllib.request.urlopen(request, timeout=0.6) as response:
html = response.read().decode('utf-8')
break
except:
# 对于抓取到的异常,让程序停止1.1秒,再循环重新访问这个链接,访问成功时退出循环
time.sleep(1.1) # 匹配文章标题
title_req = re.compile(r'<h1>(.+?)</h1>')
# 匹配文章内容,内容中有换行,所以使flags=re.S re.S表示跨行匹配
#content_req = re.compile(r'<div class ="content-body">(.+)</div>', re.S)
content_req = re.compile(r'<p>(.*?)</p>', re.S)
#"<div[^>]+>.+?<div>(.+?)</div></div>", re.I
#content_req = re.compile(r'<div[^>]+>.+?<div>(.+?)</div></div>', re.S)
# 获取标题
title = title_req.findall(html)[0]
# 获取内容
content_test = content_req.findall(html)
print('抓取章节>' + title)
f.write(title + '\n')
#print(content_test)
for each in content_test:
# 筛除不需要的的html元素
str1 = each.replace('&ldquo;', ' ')
str2 = str1.replace('&hellip;', ' ')
str3 = str2.replace('&rdquo;',' ')
f.write(str3 + '\n')


【解决过程】

1. 再次确认其编码格式,确实是utf-8;

2.此问题觉得很诡异的是,本身调用UTF-8去decode,但是解码出错却提示的是GBK的,而不是UTF-8相关解码出错。

3.找了其他帖子,尝试在解码时添加ignore 属性,但没有解决。文中提供的第二种解释,直觉不是这个原因。继续找其他帖子。

https://www.crifan.com/unicodeencodeerror_gbk_codec_can_not_encode_character_in_position_illegal_multibyte_sequence/

4.又找到一个,

http://www.jb51.net/article/64816.htm

根据提示,在文件打开时添加 encoding='utf-8', 即,

    with open('E:\盗墓test22.txt', 'w',encoding='utf-8') as f:

问题解决。


【参考】

【总结】Python 2.x中常见字符编码和解码方面的错误及其解决办法

UnicodeEncodeError: ‘gbk’ codec can’t encode character u’\u200e’ in position 43: illegal multib的更多相关文章

  1. UnicodeEncodeError: ‘gbk’ codec can’t encode character u’\u200e’ in position 43: illegal multibyte sequence

    [问题] python中已获取网页: http://blog.csdn.net/hfahe/article/details/5494895 的html源码,其时UTF-8编码的. 提取出其标题部分: ...

  2. 解决“UnicodeEncodeError: 'gbk' codec can't encode character u'\xa9' in position 24051: illegal multibyte sequence”错误

    今天我在爬取一个网页时出现了下面这个错误: UnicodeEncodeError: 'gbk' codec can't encode character u'\xa9' in position 240 ...

  3. 解决UnicodeEncodeError: 'gbk' codec can't encode character u'\u25aa' in position 344 : illegal multiby

    Python拿来做爬虫的确很不错,但是字符串的编码的确是稍不留神就是一个坑,GBK编码和Unicode编码的转化出现问题也是很多的,今天在解析网页数据的时候出现上述错误,解决方案如下: one_str ...

  4. Python读取中文txt文件错误:UnicodeEncodeError: 'gbk' codec can't encode character

    with open(file,'r') as f: line=f.readline() i=1 while line: line=line.decode('utf-8') line=f.readlin ...

  5. 解决python3 UnicodeEncodeError: 'gbk' codec can't encode character '\xXX' in position XX

    从网上抓了一些字节流,想打印出来结果发生了一下错误: UnicodeEncodeError: 'gbk' codec can't encode character '\xbb' in position ...

  6. UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position 1987: illegal multibyte sequence

    在爬取 url = "http://stats.meizhou.gov.cn/show/index/1543/1689" 时出现了问题: UnicodeEncodeError: ' ...

  7. [转]Python UnicodeEncodeError: 'gbk' codec can't encode character 解决方法

    使用Python写文件的时候,或者将网络数据流写入到本地文件的时候,大部分情况下会遇到:UnicodeEncodeError: 'gbk' codec can't encode character ' ...

  8. UnicodeEncodeError: 'gbk' codec can't encode character '\xbb' in position 30633: illegal multibyte sequence

    import urllib.request def load_baidu(): url = "https://www.baidu.com/" header = {"Use ...

  9. [python]UnicodeEncodeError: 'gbk' codec can't encode character '\ufffd'

    有关编码问题,一直以来都是十分头疼的问题.代码中的字符编码其实还好,但是由于使用的window系统,会用Window的默认编码去解析文本. 今天用脚本在写文件的时候,就总是弹出UnicodeEncod ...

随机推荐

  1. Spring Cloud Config 自动刷新所有节点 架构改造

    详细参考:<Sprin Cloud 与 Docker 微服务架构实战>p162-9.9.4节 要做的改动是: 1.在spring cloud config server 服务端加入 spr ...

  2. radio切换,点击方法onclick

    <label><input name="Status1" type="radio" value="first" check ...

  3. 用source函数代替繁冗的R语言打包过程

    用source函数代替繁冗的R语言打包过程 经过初级的学习和使用R语言之后我们渐渐的开始动手写自己的R语言小程序,这些小程序因为和自己的工作非常契合而变得通用性不是那么强.因此,要让它们成为一个独立的 ...

  4. PinnedListView分析一

    分享一个Android控件,PinnedHeaderListView , 大致是像图钉一样,能够固定显示一个头部在ListView的顶部,类似于Android原版通讯录中联系人按照字母分组排列, 这个 ...

  5. MYSQL查询前30条数据

    , LIMIT 接受一个或两个数字参数. 参数必须是一个整数常量. 如果给定两个参数,第一个参数指定第一个返回记录行的偏移量, 第二个参数指定返回记录行的最大数目. 初始记录行的偏移量是 (而不是 )

  6. Axiom3D:数据绑定基本流程

    在前面我们学习OpenGL时,不管绘制如球,立方体,平面,地面,动画模型中最常用的几个操作有创建缓冲区,写入缓冲区.在Axiom中,相关的操作被整合与组织到VertexData,IndexData中, ...

  7. SpagoBI 教程 Lesson 2: OLAP with JPIVOT

    SpagoBI Lesson 2: OLAP with JPIVOT Online Analytical Processing Online Analytical Processing (OLAP) ...

  8. Spring Boot使用Servlet、Filter或Listener的方式

    根据官方文档说明,有两种方式可以在你的Spring Boot应用中使用Servlet.Filter或Listener. 其一:将Servlet.Filter或Listener注册成Spring Bea ...

  9. 事件的监听是由awt完成的

    学swing 之前先学awt ,因为awt 是Java实现图形界面的基础. 它能够完成编写界面的基本功能,最重要的是,事件的监听是由awt完成的. 而swing是在awt基础上提供的新的界面工具包,它 ...

  10. can 驱动

    http://www.cnblogs.com/general001/articles/2342728.html http://blog.csdn.net/luoqindong/article/deta ...