经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Go语言 » 查看文章
Golang爬虫框架colly使用浅析
来源:jb51  时间:2023/5/17 8:51:32  对本文有异议

Golang 是一门非常适合编写网络爬虫的语言,它有着高效的并发处理能力和丰富的网络编程库。下面是一个简单的 Golang 网络爬虫示例:

  1. package main
  2. import (
  3. "fmt"
  4. "net/http"
  5. "io/ioutil"
  6. "regexp"
  7. )
  8. func main() {
  9. resp, err := http.Get("https://www.example.com")
  10. if err != nil {
  11. fmt.Println("Error:", err)
  12. return
  13. }
  14. defer resp.Body.Close()
  15. body, err := ioutil.ReadAll(resp.Body)
  16. if err != nil {
  17. fmt.Println("Error:", err)
  18. return
  19. }
  20. re := regexp.MustCompile("<title>(.*)</title>")
  21. title := re.FindStringSubmatch(string(body))[1]
  22. fmt.Println("Title:", title)
  23. }

这个爬虫的功能是获取指定网站的标题。代码中使用了 Go 的标准库 net/http 和 regexp 来进行网络请求和正则表达式匹配。当然,这只是一个简单的示例,实际上爬虫需要考虑更多的问题,比如反爬虫、数据存储、并发控制等等。

gocolly是用go实现的网络爬虫框架,我这里用来测试的版本是:colly “github.com/gocolly/colly/v2”

gocolly的网络爬虫还是很强大,下面我们通过代码来看一下这个功能的使用

  1. package main
  2. import (
  3. "fmt"
  4. colly "github.com/gocolly/colly/v2"
  5. "github.com/gocolly/colly/v2/debug"
  6. )
  7. func main() {
  8. mUrl := "http://www.ifeng.com/"
  9. //colly的主体是Collector对象,管理网络通信和负责在作业运行时执行附加的回掉函数
  10. c := colly.NewCollector(
  11. // 开启本机debug
  12. colly.Debugger(&debug.LogDebugger{}),
  13. )
  14. //发送请求之前的执行函数
  15. c.OnRequest(func(r *colly.Request) {
  16. fmt.Println("这里是发送之前执行的函数")
  17. })
  18. //发送请求错误被回调
  19. c.OnError(func(_ *colly.Response, err error) {
  20. fmt.Print(err)
  21. })
  22. //响应请求之后被回调
  23. c.OnResponse(func(r *colly.Response) {
  24. fmt.Println("Response body length:", len(r.Body))
  25. })
  26. //response之后会调用该函数,分析页面数据
  27. c.OnHTML("div#newsList h1 a", func(e *colly.HTMLElement) {
  28. fmt.Println(e.Text)
  29. })
  30. //在OnHTML之后被调用
  31. c.OnScraped(func(r *colly.Response) {
  32. fmt.Println("Finished", r.Request.URL)
  33. })
  34. //这里是执行访问url
  35. c.Visit(mUrl)
  36. }

运行结果如下:

这里是发送之前执行的函数

[000001] 1 [     1 - request] map["url":"http://www.ifeng.com/"] (0s)
[000002] 1 [     1 - responseHeaders] map["status":"OK" "url":"http://www.ifeng.com/"] (64.9485ms)
Response body length:250326
Finished http://www.ifeng.com/
[000003] 1 [     1 - response] map["status":"OK" "url":"http://www.ifeng.com/"] (114.9949ms)
[000004] 1 [     1 - html] map["selector":"div#newsList h1 a" "url":"http://www.ifeng.com/"] (118.9926ms)
[000005] 1 [     1 - html] map["selector":"div#newsList h1 a" "url":"http://www.ifeng.com/"] (118.9926ms)
[000006] 1 [     1 - scraped] map["url":"http://www.ifeng.com/"] (118.9926ms)

总结一下:

回调函数的调用顺序如下:

OnRequest在发起请求前被调用

OnError请求过程中如果发生错误被调用

OnResponse收到回复后被调用

OnHTML在OnResponse之后被调用,如果收到的内容是HTML

OnScraped在OnHTML之后被调用

到此这篇关于Golang爬虫框架colly使用浅析的文章就介绍到这了,更多相关Go colly框架内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号