golang 使用 goquery 和通道进行爬取网页所有的子链接,但是跑一会就报错了

wmd_nb · · 2215 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

代码如下 ``` package main import ( "fmt" "log" "net/http" "os" "github.com/PuerkitoBio/goquery" ) func urllist(url string) ([]string, error) { var backurl []string resp, err := http.Get(url) if err != nil { return nil, err } if resp.StatusCode != http.StatusOK { resp.Body.Close() return nil, fmt.Errorf("getting %s: %s", url, resp.Status) } fmt.Println(url) dom, err := goquery.NewDocumentFromReader(resp.Body) if err != nil { return nil, err } dom.Find("a").Each(func(i int, selection *goquery.Selection) { href, true := selection.Attr("href") if true { link, _ := resp.Request.URL.Parse(href) backurl = append(backurl, link.String()) } }) return backurl, nil } func main() { firsturl := make(chan []string) uniqurl := make(chan string) go func() { firsturl <- os.Args[1:] }() for i := 0; i < 20; i++ { go func() { for link := range uniqurl { foundlink, err := urllist(link) if err != nil { log.Print(err) } go func() { firsturl <- foundlink }() } }() } seen := make(map[string]bool) for list := range firsturl { for _, link := range list { if !seen[link] { seen[link] = true uniqurl <- link } } } } ``` 执行:go run pachong.go http://news.baidu.com 报错: ```goroutine 36 [running]: net/url.(*URL).String(0x0) /usr/local/Cellar/go/1.17/libexec/src/net/url/url.go:813 +0x40 main.urllist.func1(0xc00019e340, 0xc000660780) /Users/baby/Desktop/go/study/goroutine/goquery/pachong.go:31 +0x6b github.com/PuerkitoBio/goquery.(*Selection).Each(0xc001084270, 0xc00042ff28) /Users/baby/Library/go/pkg/mod/github.com/!puerkito!bio/goquery@v1.8.0/iteration.go:10 +0x46 main.urllist({0xc0001c8b70, 0x1c}) /Users/baby/Desktop/go/study/goroutine/goquery/pachong.go:27 +0x15e main.main.func2() /Users/baby/Desktop/go/study/goroutine/goquery/pachong.go:45 +0x68 created by main.main /Users/baby/Desktop/go/study/goroutine/goquery/pachong.go:43 +0x9f exit status 2 ``` 求指点

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2215 次点击  
加入收藏 微博
2 回复  |  直到 2022-04-28 10:14:04
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传