package main import ( "fmt" "github.com/PuerkitoBio/goquery" "log" "net/http" "strconv" "strings" ) // 电影列表地址 var url="" //文件地址路径 //const YUMING = "http://zuikzy.cc/" const school ="" //需要爬取的域名 func Savedata(){ for i:=36;i>0;i-- { //利用for循环,重复执行 movieurl:=strconv.Itoa(i) //将int转化为string log.Println(fmt.Sprintf("【开始爬取,页码: 请求地址为 %s 】",i, movieurl)) //输出爬取链接 res, err := http.Get(url+movieurl+".htm") //进行字符串拼接获取html checkErr(err, "【爬取网站地址请求异常 】") if res.StatusCode != 200 { log.Fatalf("status code error: %d %s", res.StatusCode, res.Status) } doc, err := goquery.NewDocumentFromReader(res.Body) checkErr(err, "爬取成功,解析html异常") // doc.Find(".cbox ul li").Each(func(j int, tr *goquery.Selection) { //对clss名字为cbox的标签中的ul中的li 进行循环遍历 title := tr.Find("a").Eq(0).Text() //标题 输出li中第一个a标签的值 detailsLink, ok := tr.Find("a").Eq(0).Attr("href") //详情页地址 //获取li中a的链接值 times := tr.Find("span").Eq(0).Text() // 输出时间 //获取第一个span标签的值 if ok != true { fmt.Println("获取失败") } fmt.Println(title,detailsLink,times) newdetailsLink:=strings.Replace(detailsLink,"..","",-1) //将代表使用replace进行全部替换如果 log.Println(newdetailsLink,title,times) fmt.Println(school+newdetailsLink) res,err:=http.Get(school+newdetailsLink) if err!=nil{ fmt.Println("2") } dom,err:=goquery.NewDocumentFromReader(res.Body) dom.Find(".v_news_content p").Each(func(i int, selection *goquery.Selection) { text:=selection.Text() fmt.Println(text) }) }) } } func main() { Savedata() } // 错误检查 func checkErr(err error,msg string) { if err != nil { fmt.Println(msg,err) } }
里面用到了很多的知识点,大家能理解就好,感谢其他网络的代码 让我学习到了很多知识点,感谢飞鸟无情,和一些列goquery开发者
大家就看逻辑就行了 ,我只是大致修改了一下,如有不好的,请谅解,本人技术有限