Colly 报错“invalid memory address or nil pointer dereference”,如何解决?

colly 报错“invalid memory address or nil pointer dereference”,如何解决?

colly 报错:“invalid memory address or nil pointer dereference”

原代码摘自问题描述:

func downloadimages(e *colly.htmlelement) {    srcref := desturl + e.attr("src")    res, _ := http.get(srcref)    if strings.contains(srcref, "http") && strings.contains(srcref, ".jpg") {        arr := strings.split(srcref, "/")        filename := strings.split(arr[len(arr)-1], ".")[0]        fmt.println("filename", filename)        f, _ := os.create("./images/" + filename + ".jpg")        defer f.close()        written, _ := io.copy(f, res.body)        fmt.println("info", written)    }}

登录后复制

代码在第55行执行 os.create 操作时发生空指针引用错误。这是因为在对 srcref 进行拆分操作时,没有检查 srcref 是否为 nil,或者对应的文件和目录是否存在。

修改后的代码如下:

func downloadImages(e *colly.HTMLElement) {    srcRef := destUrl + e.Attr("src")    if srcRef == "" {        return    }    res, err := http.Get(srcRef)    if err != nil {        log.Printf("Failed to fetch image: %v", err)        return    }    if strings.Contains(srcRef, "http") && strings.Contains(srcRef, ".jpg") {        arr := strings.Split(srcRef, "/")        fileName := strings.Split(arr[len(arr)-1], ".")[0]        fmt.Println("fileName", fileName)        path := "./images/" + fileName + ".jpg"        f, err := os.Create(path)        if err != nil {            log.Printf("Failed to create file: %v", err)            return        }        defer f.Close()        written, err := io.Copy(f, res.Body)        if err != nil {            log.Printf("Failed to write to file: %v", err)            return        }        fmt.Println("info", written)    }}

登录后复制

以上就是Colly 报错“invalid memory address or nil pointer dereference”,如何解决?的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2317156.html

(0)
上一篇 2025年2月28日 15:23:32
下一篇 2025年2月23日 17:56:31

AD推荐 黄金广告位招租... 更多推荐

相关推荐

发表回复

登录后才能评论