为了账号安全,请及时绑定邮箱和手机立即绑定

大神们,帮看下在python3.6上运行出现这个错误帮解决下,谢谢了

import urllib.request
import re

req=urllib.request.urlopen("http://www.imooc.com/course/list")
buf = req.read()
listurl = re.findall(r'http:.+?\.jpg',buf)

i=0
for url in listurl:
    f=open(str(i)+'.jpg','w')
    req=urllib.request.urlopen(url)
    buf= req.read()
    f.write(buf)
    i=i+1
    f.close()

     



错误:Traceback (most recent call last):
  File "C:\Users\zhuzhihao\Desktop\bb.py", line 6, in <module>
    listurl = re.findall(r'http:.+?\.jpg',buf)
  File "E:\python\lib\re.py", line 222, in findall
    return _compile(pattern, flags).findall(string)
TypeError: cannot use a string pattern on a bytes-like object
>>>

正在回答

3 回答

上面buf = req.read()改成

buf = req.read().decode('utf-8')


0 回复 有任何疑惑可以回复我~

re.findall(r'http:.+?\.jpg',buf),在python3里,这个buf是byte类型,需要str转换下findall才可以接受

另外,创建jpg文件时,要是使用wb,然后write(buf), 不用再将buf 做 str(buf)处理

如果你open时仅使用w,写入时就要使用str(buf), 但这样保存的jpg无法打开

0 回复 有任何疑惑可以回复我~

re.findall()第二个参数需要字符串类型,但是req.read()的返回值不是字符串,需要str()转换一下。应该为listurl = re.findall(r'http:.+?\.jpg',str(buf))

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

大神们,帮看下在python3.6上运行出现这个错误帮解决下,谢谢了

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信