• 爬取豆瓣电影 Top250
    • 目标
    • 开始
      • 安装
      • 运行
      • 代码片段
        • 1、获取所有分页
        • 2、分析豆瓣电影信息
      • 数据

    爬取豆瓣电影 Top250

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

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

    目标

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

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

    image

    简单的分析一下目标源

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

    开始

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

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

    安装

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

    运行

    1. $ go run main.go

    代码片段

    1、获取所有分页

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

    2、分析豆瓣电影信息

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

    数据

    image

    image

    image

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