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

来源:4-2 python正则表达式练习

qq_空城沉浮_0

2018-06-15 14:25

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回答

  • 慕粉4246110
    2019-01-17 16:12:02

    上面buf = req.read()改成

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


  • 冬眠仔
    2018-07-01 15:06:41

    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 20:56:48

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

python正则表达式

如何使用正则处理文本,带你对python正则有个全面了解

80575 学习 · 174 问题

查看课程

相似问题