[日常] Go语言圣经--并发的web爬虫
2023-02-18 15:41:38 时间
两种:
crawler.go
package main import ( "fmt" "links" //"log" "os" ) func main() { worklist := make(chan []string) // Start with the command-line arguments. go func() { worklist <- os.Args[1:] }() // Crawl the web concurrently. seen := make(map[string]bool) for list := range worklist { for _, link := range list { if !seen[link] { seen[link] = true go func(link string) { worklist <- crawl(link) }(link) } } } } var tokens = make(chan struct{}, 20) //从一个url页面中提取出所有的url func crawl(url string) []string { fmt.Println(url) tokens <- struct{}{} list, err := links.Extract(url) <-tokens if err != nil { //log.Print(err) } return list }
crawler2.go
package main import ( "fmt" "links" //"log" "os" "strings" ) func main() { worklist := make(chan []string) unseenLinks := make(chan string) // Start with the command-line arguments. go func() { worklist <- os.Args[1:] }() // Create 20 crawler goroutines to fetch each unseen link. for i := 0; i < 20; i++ { go func() { for link := range unseenLinks { //if strings.HasPrefix(link, "http://www.lypeng.com") { foundLinks := crawl(link) go func() { worklist <- foundLinks }() //} } }() } // The main goroutine de-duplicates worklist items // and sends the unseen ones to the crawlers. seen := make(map[string]bool) for list := range worklist { for _, link := range list { if !seen[link] { seen[link] = true unseenLinks <- link } } } } //从一个url页面中提取出所有的url func crawl(url string) []string { fmt.Println(url) list, err := links.Extract(url) if err != nil { //log.Print(err) } return list }
相关文章
- linux系统开mc服务器
- 红队技术-Cobaltstrike之Linux上线
- 权限维持-Linux后门
- 万万没想到,go的数据库操作,也能像php一样溜了
- Typora+PicGo+GitHub实现图片快速上传
- Linux计划任务服务程序
- 2022 如何在 GitHub 上搭建个人网站(github.io)
- 虚拟机安装linux无法访问外网解决办法
- 用过 mongodb 吧, 这三个大坑踩过吗?
- 教你配置windows上的windbg,linux上的lldb,打入clr内部这一篇就够了
- MongoDB 在评论中台的实践
- 使用mongodb作为Quartz.Net下的JobStore实现底层的持久化机制
- mongodb之使用explain和hint性能分析和优化
- mongodb 3.x 之实用新功能窥看[2] ——使用$lookup做多表关联处理
- mongodb 3.x 之实用新功能窥看[1] ——使用TTLIndex做Cache处理
- 双十一来了,别让你的mongodb宕机了
- GO语言开发环境搭建笔记
- PHP判断网络连通
- 开启phpMyAdmin的远程登录
- PHP_cURL初始化和执行方法