吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1611|回复: 0
收起左侧

[其他转载] GO语言 COLLY库初学,实现一个图片网站的采集,还没写完!

  [复制链接]
YXK 发表于 2021-7-20 10:59
[Golang] 纯文本查看 复制代码
package main

import (
        "encoding/csv"
        "fmt"
        "github.com/PuerkitoBio/goquery"
        "github.com/gocolly/colly"
        "log"
        "os"
        "time"
)


func main() {

        fName := "图片.csv"
        file, err := os.Create(fName)
        if err != nil {
                log.Fatalf("无法找到文件 %q: %s\n", fName, err)
                return
        }
        defer file.Close()
        writer := csv.NewWriter(file)
        defer writer.Flush()
        // 写到运行目录CSV文件-首行文本
        writer.Write([]string{"详情界面地址"})

        //采集目标网址
        url := "https://www.ivsky.com/tupian/"

        //创建收集器
        c := colly.NewCollector(
                //设置选项
                colly.UserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36"),
                )


        // 设置抓取频率限制
        c.Limit(&colly.LimitRule{
                DomainGlob:  "*",
                RandomDelay: 5 * time.Second, // 随机延迟
                Parallelism: 2, //并发数
        })

        //详情页
        c.OnHTML("ul.ali", func(e *colly.HTMLElement) {
                // 依次遍历所有的li节点
                e.DOM.Find("li").Each(func(i int, s *goquery.Selection) {
                        href, found := s.Find("div.il_img > a").Attr("href")
                        // 如果找到了详情页,则继续下一步的处理
                        if found {
                                //调试输出绝对地址
                                log.Println(e.Request.AbsoluteURL(href))

                                //把得到的详情页地址写入CSV文件
                                writer.Write([]string{e.Request.AbsoluteURL(href)})
                                //调试输出相对地址
                                //log.Println(href)
                        }
                })
        })

        //所有页码
        c.OnHTML("div.pagelist", func(e *colly.HTMLElement) {
                href, found := e.DOM.Find("a.page-next").Attr("href")
                // 如果有下一页,则继续访问
                if found {
                        //继续访问绝对地址的下一页
                        e.Request.Visit(e.Request.AbsoluteURL(href))
                }
        })


        //请求发起之前输出请求地址
        c.OnRequest(func(r *colly.Request) {
                fmt.Println("Visiting", r.URL)
        })

        //访问采集目标
        c.Visit(url)

}

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

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-25 14:53

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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