Python爬虫运行正常,最后却报错

炫彩灵感 2016-01-02 04:15:25
刚学Python,不明白,特来请教。
程序是爬取贴吧某个地址的图片,运行正常,图片也都下载下来了。
代码如下:
import urllib.request
import re
response = urllib.request.urlopen("http://tieba.baidu.com/p/3646792267?fr=ala0&pstaala=2&tpl=5")
html = response.read().decode("utf-8")
a='src="(.*?\.jpg)"'
c=re.findall(a,html)
s=0
for i in c:
urllib.request.urlretrieve(i,"%s.png" % s)
s=s+1

然而在执行完毕报错:
Traceback (most recent call last):
File "E:/untitled/getpng.py", line 10, in <module>
s=s+1
File "E:\Python\lib\urllib\request.py", line 187, in urlretrieve
with contextlib.closing(urlopen(url, data)) as fp:
File "E:\Python\lib\urllib\request.py", line 162, in urlopen
return opener.open(url, data, timeout)
File "E:\Python\lib\urllib\request.py", line 465, in open
response = self._open(req, data)
File "E:\Python\lib\urllib\request.py", line 483, in _open
'_open', req)
File "E:\Python\lib\urllib\request.py", line 443, in _call_chain
result = func(*args)
File "E:\Python\lib\urllib\request.py", line 1268, in http_open
return self.do_open(http.client.HTTPConnection, req)
File "E:\Python\lib\urllib\request.py", line 1240, in do_open
h.request(req.get_method(), req.selector, req.data, headers)
File "E:\Python\lib\http\client.py", line 1083, in request
self._send_request(method, url, body, headers)
File "E:\Python\lib\http\client.py", line 1118, in _send_request
self.putrequest(method, url, **skips)
File "E:\Python\lib\http\client.py", line 960, in putrequest
self._output(request.encode('ascii'))
UnicodeEncodeError: 'ascii' codec can't encode characters in position 263-268: ordinal not in range(128)

Process finished with exit code 1
大神解答一下这个是什么意思,万分感谢。
...全文
1345 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
胖胖的飞象 2018-02-23
  • 打赏
  • 举报
回复
没有必要这么写,容易导致编解码问题,建议可以去我的github库里学习一下代码写法
  • 打赏
  • 举报
回复
try-except处理不太好~~~bytes转成string需要知道网页的charset, charset=response.info().get_content_charset(), 拿到了编码, 就bytes.deocde(charset)就得到网页的数据, ’utf-8‘写死有很多问题~~
rjzou2006 2016-01-05
  • 打赏
  • 举报
回复
用 try except 处理一下
似梦飞花 2016-01-02
  • 打赏
  • 举报
回复
'ascii' codec can't encode characters in position 263-268: ordinal not in range(128)好像编码有问题的样子
pcboyxhy 2016-01-02
  • 打赏
  • 举报
回复
把i打出来看看就知道了,因为有个.gif的图片,你的正则匹配出来url就不对了,url里有中文,没法用ascii编码序列化. 最好不要用正则去解析DOM,写个正确覆盖各种边边角角情况的正则也不是那么容易的。

37,721

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧