吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1607|回复: 3
收起左侧

[其他原创] 最近新学习的go语言爬虫,用来爬取网上头像

[复制链接]
wuxiuxin 发表于 2022-7-22 08:43
package main
import (
    "fmt"
    "io/ioutil"
    "net/http"
    "regexp"
    "sync"
)
var (
    //图片正则
    reImage = `"((http://)(.*?)(\.jpg))"`
    //大标题列表 图片
    //class="nr"
    reTitlediv  = `<ul[\s\S]class=PicList>[.*\s\S]+<div[\s\S]class="showpage">`
    reTitleurl  = `"(https?://)(.*?)(\.((jpg)|(gif)|(bmp)|(jpeg)))"`
    reTitleList = `href="(/touxiang/\d+\.htm)"><`
    //内容页面
    reContentdiv = `<div[\s\S]class="wznr">[.*\s\S]+<div[\s\S]class="wzsx">`
    //图片名字
    imageTitle = `/([A-Z]{2}\d{2,4}_\d{1,3}\.jpg)`
)
var wg sync.WaitGroup
//获取页面数据
func getUrl(url string) string {
    resp, err := http.Get(url)
    Handerr(err, "http.Get(youxiang)")
    defer resp.Body.Close()
    bodyByte, err := ioutil.ReadAll(resp.Body)
    Handerr(err, "ioutil.ReadAll(resp.Body)")
    bodyStr := string(bodyByte)
    return bodyStr
}
//正则分析页面数据
func FXdata(htmlStr, reStr string) [][]string {
    re := regexp.MustCompile(reStr)
    list := re.FindAllStringSubmatch(htmlStr, -1)
    return list
}
//保存图片
func savepic(url string) {
    defer wg.Add(-1)
    imageNameStr := FXdata(url, imageTitle)
    //fmt.Println(imageNameStr)
    //return
    imageName := imageNameStr[0][1]
    fmt.Println(imageName, "正在下载")
    resp, err := http.Get(url)
    defer resp.Body.Close()
    if err != nil {
        fmt.Println(err)
    }
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        fmt.Println(err)
    }
    err = ioutil.WriteFile(imageName, body, 0777)
    fmt.Println(err)
}
//1.0 解析首页
func shouye(url string) {
    //fmt.Println(url)
    body := getUrl(url)
    //fmt.Println(body)
    //解析区块内容
    list := FXdata(body, reTitlediv)
    //fmt.Println(list[0][0])
    //当前区块 跳转链接
    htmlList := FXdata(list[0][0], reTitleList)
    fmt.Println(htmlList)
    for _, val := range htmlList {
        neirong("http://www.2qqtouxiang.com" + val[1])
    }
}
//2.0 内容
func neirong(imgUrl string) {
    body := getUrl(imgUrl)
    //解析区块内容
    list := FXdata(body, reContentdiv)
    //获取图片地址
    imgList := FXdata(list[0][0], reImage)
    fmt.Println("页面:"+imgUrl+"数据个数:", len(imgList))
    for _, val := range imgList {
        wg.Add(1)
        go savepic(val[1])
    }
}
func main() {
    for i := 77; i >= 50; i-- {
        idstr := fmt.Sprintf("%d", i)
        imgUrl := "http://www.2qqtouxiang.com/touxiang/list" + idstr + ".htm"
        fmt.Println(imgUrl)
        shouye(imgUrl)
    }
}
    if err != nil {
        fmt.Println(msg, err)
    }
}

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| wuxiuxin 发表于 2022-7-22 08:44
这个只是用来爬取固定网址图像,欢迎大家在这条帖子下面进去完善
KaiVvv 发表于 2022-7-22 11:06
halfone 发表于 2022-7-22 11:13
[Golang] 纯文本查看 复制代码
package main
import (
    "fmt"
    "io/ioutil"
    "net/http"
    "regexp"
    "sync"
)
var (
    //图片正则
    reImage = `"((http://)(.*?)(\.jpg))"`
    //大标题列表 图片
    //class="nr"
    reTitlediv  = `<ul[\s\S]class=PicList>[.*\s\S]+<div[\s\S]class="showpage">`
    reTitleurl  = `"(https?://)(.*?)(\.((jpg)|(gif)|(bmp)|(jpeg)))"`
    reTitleList = `href="(/touxiang/\d+\.htm)"><`
    //内容页面
    reContentdiv = `<div[\s\S]class="wznr">[.*\s\S]+<div[\s\S]class="wzsx">`
    //图片名字
    imageTitle = `/([A-Z]{2}\d{2,4}_\d{1,3}\.jpg)`
)
var wg sync.WaitGroup
//获取页面数据
func getUrl(url string) string {
    resp, err := http.Get(url)
    Handerr(err, "http.Get(youxiang)")
    defer resp.Body.Close()
    bodyByte, err := ioutil.ReadAll(resp.Body)
    Handerr(err, "ioutil.ReadAll(resp.Body)")
    bodyStr := string(bodyByte)
    return bodyStr
}
//正则分析页面数据
func FXdata(htmlStr, reStr string) [][]string {
    re := regexp.MustCompile(reStr)
    list := re.FindAllStringSubmatch(htmlStr, -1)
    return list
}
//保存图片
func savepic(url string) {
    defer wg.Add(-1)
    imageNameStr := FXdata(url, imageTitle)
    //fmt.Println(imageNameStr)
    //return
    imageName := imageNameStr[0][1]
    fmt.Println(imageName, "正在下载")
    resp, err := http.Get(url)
    defer resp.Body.Close()
    if err != nil {
        fmt.Println(err)
    }
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        fmt.Println(err)
    }
    err = ioutil.WriteFile(imageName, body, 0777)
    fmt.Println(err)
}
//1.0 解析首页
func shouye(url string) {
    //fmt.Println(url)
    body := getUrl(url)
    //fmt.Println(body)
    //解析区块内容
    list := FXdata(body, reTitlediv)
    //fmt.Println(list[0][0])
    //当前区块 跳转链接
    htmlList := FXdata(list[0][0], reTitleList)
    fmt.Println(htmlList)
    for _, val := range htmlList {
        neirong("http://www.2qqtouxiang.com" + val[1])
    }
}
//2.0 内容
func neirong(imgUrl string) {
    body := getUrl(imgUrl)
    //解析区块内容
    list := FXdata(body, reContentdiv)
    //获取图片地址
    imgList := FXdata(list[0][0], reImage)
    fmt.Println("页面:"+imgUrl+"数据个数:", len(imgList))
    for _, val := range imgList {
        wg.Add(1)
        go savepic(val[1])
    }
}
func main() {
    for i := 77; i >= 50; i-- {
        idstr := fmt.Sprintf("%d", i)
        imgUrl := "http://www.2qqtouxiang.com/touxiang/list" + idstr + ".htm"
        fmt.Println(imgUrl)
        shouye(imgUrl)
    }
}
    if err != nil {
        fmt.Println(msg, err)
    }
}


感谢分享!做为一个强迫症患者,表示还是这样看着舒服点。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 03:37

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表