用go实现简单爬虫| go小项目练习

目标

用go爬取豆瓣上250个高分好评电影名称

实现思路
  • 通过用http包的client成为客户端
  • 获取页面信息
  • 设置user-agent
  • 再次发起http请求
  • 用goquery爬取数据
代码实现
package main

import (
    "fmt"
    "github.com/PuerkitoBio/goquery"
    "log"
    "net/http"
    "strconv"
    "time"
)

//1、请求
//2、解析
//3、打印
func main() {
    //获取客户端
    client := &http.Client{
        Timeout: 2 * time.Second,
    }
    //根据url的规律,for循环获取10张页面
    for i := 0; i < 10; i++ {
        index := i * 25
        //strconv.Itoa(index)将整型转换成string型
        req, _ := http.NewRequest("GET", "https://movie.douban.com/top250?start="+strconv.Itoa(index)+"&filter=", nil)

        //User-Agent
        //即用户代理,网站服务器通过识别它来确定用户所使用的操作系统版本、CPU 类型、浏览器版本等信息,并判断通过判断它来给客户端发送不同的页面。
        //在返回值的头部设置user-agent
        req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36")
        //发起 HTTP 请求
        resp, err := client.Do(req)
        if err != nil {
            fmt.Printf("%s\n", err.Error())
            return
        }

        defer resp.Body.Close()

        //resp.Body就是html文件
        doc, err := goquery.NewDocumentFromReader(resp.Body)
        if err != nil {
            log.Fatal(err)
        }
        //#content 表示id为content
        //.grid_view 表示class为grid_view
        doc.Find("#content .grid_view li").Each(func(i int, s *goquery.Selection) {
            content := s.Find(".title").Eq(0).Text()
            fmt.Println(content)
        })
    }
}

goquery参考链接

你可能感兴趣的:(用go实现简单爬虫| go小项目练习)