之前一直都是再用Python写爬虫,最近想体验下Golang写爬虫的感觉,所以就有了这个系列。我想要抓取的页面是豆瓣Top250页面,选择它的理由有3个:

  1. 豆瓣页面代码相对规范
  2. 豆瓣对爬虫爱好者相对更宽容
  3. Top250页面简洁,很适合拿来练手

我们先看第一版的代码。

按逻辑我把抓取代码分成2个部分:

  1. HTTP请求
  2. 解析页面中的内容

我们先看HTTP请求,Golang语言的HTTP请求库不需要使用第三方的库,标准库就内置了足够好的支持:

我把URL请求的逻辑都放在了fetch函数中,里面做了一些异常处理。值得说的有2点:

  1. 在Header中设置了User-Agent,让访问看起来更像搜索引擎Bot。如果一个网站希望自己的内容被Google收录那么他就不会拒绝这样的UA的访问。
  2. 需要通过ioutil.ReadAll 读取resp的body内容,最后用string(body)把它转化成字符串

接着就是解析页面的部分:

strings.Replace(body, "\n", "", -1).*FindAllStringSubmatchFindStringSubmatch

Top250页面是要翻页的,最后在main函数里面实现抓取全部Top250页面。另外为了和之后的改进做对比,我们加上代码运行耗时的逻辑:

strconv.Itoa

运行起来非常快:

通过终端输出可以看到我们拿到了对应电影条目的ID和电影标题!

代码地址

完整代码可以在这个地址找到。