问答详情
源自:4-2 python正则表达式练习

新手求解,谢谢

import urllib.request
import re


req = urllib.request.urlopen('http://www.imooc.com/course/list')
buf = req.read().decode('utf-8')
listurl = re.findall(r'http:.+\.jpg',buf)
print(listurl)

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

出现问题:http://img.mukewang.com/59802adb0001b1f106640512.jpg

提问者:清一色610 2017-08-01 15:17

个回答

  • 慕粉3606827
    2017-08-03 15:22:36
    已采纳

    我自己试了一下,发现会读取出这种如图1的结果,我个人猜测是因为在正则表达式中使用了+这个贪婪模式的字符,所以会尽量匹配多的字符,所以看图中就知道,它把两个地址的字符串都匹配进去了,因为两个字符串连接在一起也是http开头,.jpg结尾的,把“listurl = re.findall(r'http:.+\.jpg',buf)”改成“listurl = re.findall(r'http:.+?\.jpg',buf)”,读取的结果就正确了。以上是个人观点,如有不足之处还望指出。

    http://img.mukewang.com/5982cf170001047a10650489.jpg

    http://img.mukewang.com/5982cf1800015a9d10750491.jpg


  • 慕粉3606827
    2017-08-03 14:45:54

    你抓取的地址貌似不正确吧?打印的地址之中还带有“src=”的