大神們,幫看下在python3.6上運行出現這個錯誤幫解決下,謝謝了
import urllib.request
import re
req=urllib.request.urlopen("http://www.xianlaiwan.cn/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
>>>
2019-01-17
上面buf = req.read()改成
2018-07-01
re.findall(r'http:.+?\.jpg',buf),在python3里,這個buf是byte類型,需要str轉換下findall才可以接受
另外,創建jpg文件時,要是使用wb,然后write(buf), 不用再將buf 做 str(buf)處理
如果你open時僅使用w,寫入時就要使用str(buf), 但這樣保存的jpg無法打開
2018-06-21
re.findall()第二個參數需要字符串類型,但是req.read()的返回值不是字符串,需要str()轉換一下。應該為listurl = re.findall(r'http:.+?\.jpg',str(buf))