了解爬虫基本原理,深入探索爬虫的更多玩法。现在爬虫的热度越来越高,有不少人抱着好奇心和兴趣来学习爬虫,有用 Python、Java、PHP 等等,如果你去网上问,学爬虫最好用什么语言?95% 的人会推荐使用 Python,但其中不少人并不是真正了解 Python 的,大多是网上看了点资料,然后盲目从众的。
为什么要用 Golang 原生实现简单爬虫?
- 使用 Golang 语言,我是想告诉大家,只要了解爬虫原理,不管用什么编程语言,基本上都是可以写出一个爬虫系统的。
- 原生意在不适用第三方库类,为的就是让各位更能理解爬虫的基本原理和逻辑,理解基本原理,那拓展爬虫功能是完全没有问题的。
- 简单爬虫的实现,为了让大家能更快的掌握和了解爬虫,所以不打算写一个很复杂的爬虫系统,这样也更方便那些可能并不是 Golang 程序员的理解。
技术是学无止境的,要想进步,就得尝试新东西并去理解它的核心原理,本场 Chat 您将会学到以下内容:
- Golang 的基本入门;
- 爬虫的基本原理;
- 如何防止浪费爬虫资源;
- 后期遇到的问题和解决方案;
- 正则表达式的运用;
- Golang 文件操作;
- Golang 计时器的简单运用;
- HTTP 请求的了解。
探索技术的路上本应该自己造轮子,即使市面上有再多的选择,自己动手尝试也是必要的。第一次尝试必然会问题众多,但你解决它是一件很有成就感的事情,这样才能带给你更大的进步和更深刻的领悟。
如果感兴趣的不妨一起来实现一下这个简单的爬虫。
其实用 Golang 实现爬虫是很简单是事情,但也分情况,我们这次的文章就分享一种最简单的爬虫实现方式,用到的官方库如下:
import ( "fmt" "io" "io/ioutil" "net/http" "os" "regexp" "strconv" "strings" "time" )
如果你能单单通过这些库就想到该怎么做了,那你就很棒棒了。
为了让程序能一直运行下去,我们首先要有一个源网页,然后不断爬抓记录新的链接,记录的手段有很多,比如存在数据库、通过 Redis 缓存、存在文本文件,最简单的应该就是存在数据库了,这个看你们的技术偏向了。我打算把爬来的链接储存在文本文件里。
首先,了解自己爬抓的目标,我准备爬取所有的 Golang 相关答疑或者文章,然后翻来覆去很多网站都感觉不适合做源网址,然后灵机一动,百度一下:
然后就用这样作为源网址吧:
http://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=39042058_20_oem_dg&wd=golang%E5%AE%9E%E7%8E%B0&oq=golang%2520%25E5%2588%25A0%25E9%2599%25A4%25E6%2595%25B0%25E7%25BB%2584&rsv_pq=d9be28ec0002df1b&rsv_t=8017GWpSLPhDmKilZQ1StC04EVpUAeLEP90NIm%2Bk5pRh5R9o57NHMO8Gaxm1TtSOo%2FvtJj%2B98%2Fsc&rqlang=cn&rsv_enter=1&inputT=3474&rsv_sug3=16&rsv_sug1=11&rsv_sug7=100&rsv_sug2=0&rsv_sug4=4230
有了源网址,那下面的事情只要捋顺就好办了。首先我们为了抓取到链接,需要一个正则表达式:
var ( regHref = `((ht|f)tps?)://[w]{0,3}.baidu.com/link\?[a-zA-z=0-9-\s]*` )
因为这个正则表达式我们后面可能会复用,所以可以存到一个全局变量里。
一个爬虫如果不限制分秒爬抓次数,那你的网络肯定会受不了,如果电脑配置不行的话,电脑也会挂掉,所以我们需要写一个计时器,Golang 已经提供了计时器的包 => time:
func Timer() { t := time.NewTimer(time.Second * 1) regTitle、regCheckTitle
var ( // regHref = `((ht|f)tps?)://[w]{0,3}.baidu.com/link\?[a-zA-z=0-9-\s]*` regTitle = `
关注
打赏