GO-Golang实现的简单爬虫

序言

今天在工作上面需要用到爬虫抓取部分信息,之前用Python实现了CSDN博客的抓取,后想到了目前整天面对的Golang,便摸索了一下,实现了一个简单的抓取豆瓣排行的爬虫,主要分为下面几个步骤.

- 发起Http请求

- 解析Html元素

- 存储抓取到的数据

详细阅读链接

源码链接

发起http请求
在请求方面,直接采用的Golang的"net/http"包来进行开发,步骤如下:
初始化
client := &http.Client{}
req, err := http.NewRequest("GET", swoop.url, nil)
set请求信息
for key, value := range swoop.header {
    req.Header.Add(key, value)
}
发起请求
resp, err := client.Do(req)
if err != nil {
    log.Fatalf("do client err->%v", err)
}
接收响应
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
    log.Fatalf("read resp err->%v", err)
}
解析Html元素
设置参数并请求
首先需要定义个设置参数结构体,便于操作:
type Swoop struct {
    url    string
    header map[string]string
}
设置参数后发起请求
url := "https://movie.douban.com/top250?start=" + strconv.Itoa(i*25)
swoop := &Swoop{url, header}
html := swoop.get_html_header()
解析Html元素发起请求后,接收到Html元素,接下来需要做的就是解析Html元素,将其转化为我们想要的格式,解析Html格式需要到页面浏览器查看对应的Html元素后再做操作:
//评价人数
commentCount := `<span>(.*?)评价</span>`
rp2 := regexp.MustCompile(commentCount)
txt2 := rp2.FindAllStringSubmatch(html, -1)

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

//电影名称
pattern4 := `img width="(.*?)" alt="(.*?)" src=`
rp4 := regexp.MustCompile(pattern4)
txt4 := rp4.FindAllStringSubmatch(html, -1)
如下Html页面代码,其中评价包含在"<\span>"标签内,所以在解析的时候需要解析<\span>标签:
<div class="star">
    <span class="rating5-t"></span>
    <span class="rating_num" property="v:average">9.5</span>
    <span property="v:best" content="10.0"></span>
    <span>702861人评价</span>
</div>
如下页面代码,包含了width、alt、src三个value,则需要拿到title就需要解析<\img>标签后读取第二个value值,即alt
<img width="100" alt="这个杀手不太冷" src="https://img3.doubanio.com/view/photo/s_ratio_poster/public/p511118051.jpg" class="">
- 运行代码后效果如下
运行中:



运行结束:



### 数据存储
数据存储一般根据自己的需要来做,我这里采用的是csv文件存储.

如下所示:


评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Swxctx

您的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值