Go Spider 爬取豆瓣电影Top250

package main

import (
    "time"
    "fmt"
    "github.com/360EntSecGroup-Skylar/excelize"
    "strconv"
    "regexp"
    "net/http"
    "io/ioutil"
)

type Spider1 struct {
    url    string
    header map[string]string
}

//定义spider 的 GET方法
func (spider1 *Spider1) get_html_header() string {
    //获取http.Client 对象
    client := &http.Client{}
    //创建http请求
    //param1:请求类型 param2:请求url param3:请求头body
    req,err := http.NewRequest("GET",spider1.url,nil)
    if err != nil {
    }
    //遍历spider1的header信息 添加到request
    for key, value := range spider1.header {
        req.Header.Add(key,value)
    }
    //执行req请求,接收返回对象
    resp,err := client.Do(req)
    if err != nil {
    }

    //调用结束 关闭
    defer resp.Body.Close()

    //读取body里面的内容
    html,err := ioutil.ReadAll(resp.Body)
    if err != nil {
    }
    // 返回
    return string(html)
}

func parse1() {
    //添加头信息
    header := map[string]string{
        "Host":                      "movie.douban.com",
        "Connection":                "keep-alive",
        "Cache-Control":             "max-age=0",
        "Upgrade-Insecure-Requests": "1",
        "User-Agent":                "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36",
        "Accept":                    "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
        "Referer":                   "https://movie.douban.com/top250",
    }

    //创建excel文件
    xlsx := excelize.NewFile()
    xlsx.SetCellValue("Sheet1", "A1", "电影名称")
    xlsx.SetCellValue("Sheet1", "B1", "评分")
    xlsx.SetCellValue("Sheet1", "C1", "评价人数")

    //定义整数为每行的行号 每解析一条就+1
    count := 1
    //循环每页解析并把结果写入excel
    for i := 0; i < 250/25; i++ {
        fmt.Println("正在抓取" + strconv.Itoa(i) + "页....")
        url := "https://movie.douban.com/top250?start=" + strconv.Itoa(i*25) + "&filter="
        //给结构体Spider1赋值
        spider1 := &Spider1{url, header}
        //调用spider1绑定的方法
        html := spider1.get_html_header()

        //爬取评价人数
        pattern2 := `(.*?)评价` //正则表达式
        rp2 := regexp.MustCompile(pattern2) //解析正则表达式是否合法
        //在返回的html 里查找符合的所有内容, -1表示要爬取所有内容
        find_txt2 := rp2.FindAllStringSubmatch(html, -1)

        //爬取评分
        pattern3 := `property="v:average">(.*?)`
        rp3 := regexp.MustCompile(pattern3)
        find_txt3 := rp3.FindAllStringSubmatch(html, -1)

        //爬取电影名称
        pattern4 := `(.*?)

爬取的内容

Go Spider 爬取豆瓣电影Top250_第1张图片
image.png

你可能感兴趣的:(Go Spider 爬取豆瓣电影Top250)