扫码订阅《 》或入驻星球,即可阅读文章!

GOLANG ROADMAP

阅读模式

  • 沉浸
  • 自动
  • 日常
首页
Go学习
  • Go学院

    • Go小课
    • Go小考
    • Go实战
    • 精品课
  • Go宝典

    • 在线宝典
    • B站精选
    • 推荐图书
    • 精品博文
  • Go开源

    • Go仓库
    • Go月刊
  • Go下载

    • 视频资源
    • 文档资源
Go求职
  • 求职服务

    • 内推互助
    • 求职助力
  • 求职刷题

    • 企业题库
    • 面试宝典
    • 求职面经
Go友会
  • 城市
  • 校园
推广返利 🤑
实验区
  • Go周边
消息
更多
  • 用户中心

    • 我的信息
    • 推广返利
  • 玩转星球

    • 星球介绍
    • 角色体系
    • 星主权益
  • 支持与服务

    • 联系星主
    • 成长记录
    • 常见问题
    • 吐槽专区
  • 合作交流

    • 渠道合作
    • 课程入驻
    • 友情链接
author-avatar

GOLANG ROADMAP


首页
Go学习
  • Go学院

    • Go小课
    • Go小考
    • Go实战
    • 精品课
  • Go宝典

    • 在线宝典
    • B站精选
    • 推荐图书
    • 精品博文
  • Go开源

    • Go仓库
    • Go月刊
  • Go下载

    • 视频资源
    • 文档资源
Go求职
  • 求职服务

    • 内推互助
    • 求职助力
  • 求职刷题

    • 企业题库
    • 面试宝典
    • 求职面经
Go友会
  • 城市
  • 校园
推广返利 🤑
实验区
  • Go周边
消息
更多
  • 用户中心

    • 我的信息
    • 推广返利
  • 玩转星球

    • 星球介绍
    • 角色体系
    • 星主权益
  • 支持与服务

    • 联系星主
    • 成长记录
    • 常见问题
    • 吐槽专区
  • 合作交流

    • 渠道合作
    • 课程入驻
    • 友情链接
  • 宝典简介

  • gin系列目录

  • 杂谈

  • 爬虫系列目录

    • 爬取豆瓣电影 Top250
    • 爬取汽车之家 二手车产品库
    • 了解一下Golang的市场行情
  • gRPC系列目录

扫码订阅《 》或入驻星球,即可阅读文章!

爬取豆瓣电影 Top250


煎鱼

爬虫是标配了,看数据那一刻很有趣。第一个就从最最最简单最基础的爬虫开始写起吧!

项目地址:https://github.com/go-crawler/douban-movie

# 目标

我们的目标站点是 豆瓣电影 Top250 (opens new window),估计大家都很眼熟了

本次爬取8个字段,用于简单的概括分析。具体的字段如下:

image

简单的分析一下目标源

  • 一页共25条
  • 含分页(共10页)且分页规则是正常的
  • 每一项的数据字段排序都是规则且不变

# 开始

由于量不大,我们的爬取步骤如下

  • 分析页面,获取所有的分页
  • 分析页面,循环爬取所有页面的电影信息
  • 爬取的电影信息入库

# 安装

$ go get -u github.com/PuerkitoBio/goquery
1

# 运行

$ go run main.go
1

# 代码片段

# 1、获取所有分页

func ParsePages(doc *goquery.Document) (pages []Page) {
    pages = append(pages, Page{Page: 1, Url: ""})
    doc.Find("#content > div > div.article > div.paginator > a").Each(func(i int, s *goquery.Selection) {
        page, _ := strconv.Atoi(s.Text())
        url, _ := s.Attr("href")
        pages = append(pages, Page{
            Page: page,
            Url:  url,
        })
    })
    return pages
}
1
2
3
4
5
6
7
8
9
10
11
12

# 2、分析豆瓣电影信息

func ParseMovies(doc *goquery.Document) (movies []Movie) {
    doc.Find("#content > div > div.article > ol > li").Each(func(i int, s *goquery.Selection) {
        title := s.Find(".hd a span").Eq(0).Text()
        ...
        movieDesc := strings.Split(DescInfo[1], "/")
        year := strings.TrimSpace(movieDesc[0])
        area := strings.TrimSpace(movieDesc[1])
        tag := strings.TrimSpace(movieDesc[2])
        star := s.Find(".bd .star .rating_num").Text()
        comment := strings.TrimSpace(s.Find(".bd .star span").Eq(3).Text())
        compile := regexp.MustCompile("[0-9]")
        comment = strings.Join(compile.FindAllString(comment, -1), "")
        quote := s.Find(".quote .inq").Text()
        ...
        log.Printf("i: %d, movie: %v", i, movie)
        movies = append(movies, movie)
    })
    return movies
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# 数据

image

image

image

看到这些数据,你有什么想法呢,真是好奇 :=)

  • 目标
  • 开始
  • 安装
  • 运行
  • 代码片段
  • 数据