我们说,语言决定思维方式。要掌握一种新的思维方式,学习一门新语言是最直接的方法。

我之前一直用 Python 来写爬虫,现在,尝试用 Golang 来实现一个简单的爬虫,请求网址,然后使用 XPath 提取数据。

这个爬虫项目使用 Go Mod 来管理依赖,执行下面的命令创建爬虫项目文件夹:

运行效果如下图所示:

crawler_gocrawler.go
urllibrequestsHttp for human

编写如下代码:

运行效果如下图所示:

import
resp, _:= req.Get(url)err
req

相比在 Python 中使用 lxml,在 Golang 下面使用 htmlquery 多多少少还是要麻烦一些。我们来看看如何提取练习页面的标题:

运行效果如下图所示:

从代码中可以看到,在 Golang 中使用htmlquery,每一次都要把节点传入 htmlquery 的某个函数里面。不能像 Python 里面一样通过链式调用对象的方法来获取数据。

现在我们来获取练习页上面的文字内容:

需要注意的是,第二条项目只有名字但是没有价格,我们需要在代码里面兼容这种情况:

运行效果如下图所示:

在 Golang 里面使用 XPath,还是比 Python 中要麻烦不少。这一方面是因为 Python 是面向对象的语言,而 Golang 更像是面向过程的语言。另一方面是因为 Golang 的第三方库还是不如 Python 丰富。实际上是有办法可以让 Golang 的 XPath 库达到 lxml 这种易用性的。

参考资料

[1]

req: https://github.com/imroc/req

[2]

Chapter11_example_2: http://exercise.kingname.info/exercise_xpath_2.html

[3]

htmlquery: https://github.com/antchfx/htmlquery