Go语言实现豆瓣电影Top250爬虫

使用Go语言实现豆瓣电影Top250爬虫

一、项目概述

本爬虫程序使用Go语言实现对豆瓣电影Top250榜单数据的抓取,主要功能包括多页爬取、电影信息提取和格式化展示。通过该案例可以学习到HTTP请求处理、正则表达式匹配和基础并发控制等爬虫核心技术。

二、实现思路

  1. 分页处理机制:通过构造start参数实现分页,每页包含25部电影
  2. 请求伪装:设置浏览器User-Agent绕过基础反爬
  3. 数据提取:使用正则表达式匹配关键数据
  4. 数据验证:检查抓取结果的字段一致性
  5. 增量排名:全局计数器实现电影排名统计

三、代码解析

  1. HTTP请求模块
go 复制代码
func HttpGet(url string) (result string, err error) {
    client := &http.Client{}
    req, _ := http.NewRequest("GET", url, nil)
    req.Header.Set("User-Agent", "Mozilla/5.0...")
    
    resp, err := client.Do(req)
    if resp.StatusCode != 200 {
        return "", fmt.Errorf("HTTP错误 状态码: %d", resp.StatusCode)
    }
    
    body, _ := ioutil.ReadAll(resp.Body)
    return string(body), nil
}

核心功能:

• 自定义Client实现请求控制

• 设置浏览器级User-Agent

• 状态码验证机制

• 响应体读取与返回

  1. 页面解析模块
go 复制代码
func SpiderPage(i int) {
    // 构造分页URL
    url := "https://movie.douban.com/top250?start=" + strconv.Itoa((i-1)*25)
    
    // 数据提取正则表达式
    titleReg := regexp.MustCompile(`<img width="100" alt="(?s:(.*?))"`)
    scoreReg := regexp.MustCompile(`<span class="rating_num">(?s:(.*?))</span>`)
    numReg := regexp.MustCompile(`<span>(.*?)人评价</span>`)

    // 数据验证
    if len(title) != len(score) || len(score) != len(num) {
        fmt.Println("数据不匹配!")
    }
    
    // 格式化输出
    fmt.Printf("标题: %-30s | 评分: %-4s | 评价人数: %s | 排名: %d \n",
        title[i][1], score[i][1], num[i][1], n)
}

核心功能:

• 动态URL构造

• 多字段正则匹配

• 数据一致性验证

• 格式化输出控制

  1. 主控模块
go 复制代码
func CrawlPages(start, end int) {
    for i := start; i <= end; i++ {
        SpiderPage(i)
    }
}

func main() {
    var start, end int
    fmt.Print("起始页: ")
    fmt.Scan(&start)
    
    // 输入验证
    if start > end || start < 1 {
        fmt.Println("无效的页码范围")
        return
    }
    
    CrawlPages(start, end)
}

四、关键功能点

  1. 反爬应对策略:

    • 设置浏览器User-Agent

    • 合理请求间隔(可扩展)

    • 随机代理支持(需扩展)

  2. 数据提取优化:

    go 复制代码
    // 非贪婪匹配示例
    ret := regexp.MustCompile(`alt="(?s:(.*?))"`)
    // 多行匹配模式
    ret := regexp.MustCompile(`(?s)<span>(.*?)</span>`)
  3. 错误处理机制:

    • HTTP状态码验证

    • 响应体读取异常处理

    • 正则匹配结果验证

五、运行效果示例

复制代码
标题: 肖申克的救赎               | 评分: 9.7  | 评价人数: 2838436 | 排名: 1
标题: 霸王别姬                 | 评分: 9.6  | 评价人数: 1984256 | 排名: 2
标题: 阿甘正传                 | 评分: 9.5  | 评价人数: 1856325 | 排名: 3
...

本程序仅用于学习交流,请勿用于商业用途。抓取数据可能涉及版权问题,请谨慎使用。建议在遵守相关法律法规和网站协议的前提下使用爬虫技术。

相关推荐
布茹 ei ai5 分钟前
QtWeatherApp - 简单天气预报软件(C++ Qt6)(附源码)
开发语言·c++·qt·开源·开源项目·天气预报
Wpa.wk7 分钟前
自动化测试 - 文件上传 和 弹窗处理
开发语言·javascript·自动化测试·经验分享·爬虫·python·selenium
LinHenrY12278 分钟前
初识C语言(编译和链接)
c语言·开发语言·蓝桥杯
_OP_CHEN8 分钟前
【Python基础】(二)从 0 到 1 入门 Python 语法基础:从表达式到运算符的全面指南
开发语言·python
l1t9 分钟前
利用小米mimo为精确覆盖矩形问题C程序添加打乱函数求出更大的解
c语言·开发语言·javascript·人工智能·算法
我命由我1234517 分钟前
Python Flask 开发:在 Flask 中返回字符串时,浏览器将其作为 HTML 解析
服务器·开发语言·后端·python·flask·html·学习方法
csbysj202019 分钟前
Scala 类和对象
开发语言
拾忆,想起20 分钟前
设计模式:软件开发的可复用武功秘籍
开发语言·python·算法·微服务·设计模式·性能优化·服务发现
沐知全栈开发25 分钟前
HTTP/HTTPS 简介
开发语言
跟着珅聪学java26 分钟前
HTML中设置<select>下拉框默认值的详细教程
开发语言·前端·javascript