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
>>>
上面buf = req.read()改成
buf = req.read().decode('utf-8')
re.findall(r'http:.+?\.jpg',buf),在python3里,这个buf是byte类型,需要str转换下findall才可以接受
另外,创建jpg文件时,要是使用wb,然后write(buf), 不用再将buf 做 str(buf)处理
如果你open时仅使用w,写入时就要使用str(buf), 但这样保存的jpg无法打开
re.findall()第二个参数需要字符串类型,但是req.read()的返回值不是字符串,需要str()转换一下。应该为listurl = re.findall(r'http:.+?\.jpg',str(buf))