gocolly:如何防止重复抓取,限制唯一url抓取一次

gocolly:如何防止重复抓取,限制唯一url抓取一次,go,web-scraping,go-colly,Go,Web Scraping,Go Colly,我正在用下面的代码尝试GoColly,它似乎多次爬网同一个url,我如何限制一次爬网 我怀疑是“ParallelSim:2”造成了重复,然而,有些爬网消息URL每次重复10次以上 可在不同网站上复制 戈科利又瘦又好 func main(){ c:=colly.NewCollector( colly.AllowedDomains(“www.coursera.org”), colly.Async(true), ) c、 限制(&colly.LimitRule){ 域名:“*”, 平行度:2, })

我正在用下面的代码尝试GoColly,它似乎多次爬网同一个url,我如何限制一次爬网

我怀疑是“ParallelSim:2”造成了重复,然而,有些爬网消息URL每次重复10次以上

可在不同网站上复制

戈科利又瘦又好

func main(){
c:=colly.NewCollector(
colly.AllowedDomains(“www.coursera.org”),
colly.Async(true),
)
c、 限制(&colly.LimitRule){
域名:“*”,
平行度:2,
})
c、 OnHTML(“a[href]”,func(e*colly.HTMLElement){
链接:=e.Attr(“href”)
e、 请求访问(链接)
})
页面计数:=0
c、 OnRequest(函数(r*colly.Request){
r、 Ctx.Put(“url”,r.url.String())
})
//设置错误处理程序
c、 OnError(func(r*colly.Response,err-error){
log.Println(“请求URL:,r.Request.URL,”失败,响应:,r,”\n错误:,错误)
})
//打印响应
c、 OnResponse(函数(r*colly.Response){
页数++
urlVisited:=r.Ctx.Get(“url”)
log.Println(fmt.Sprintf(“%d完成访问:%s”、页面计数、URL访问))
})
baseUrl:=”https://www.coursera.org"
c、 访问(baseUrl)
c、 等等
}

如果使用
e.Request.Visit(link)
,则请求之间会共享
Ctx
,因此其他请求可能会覆盖数据。在这些情况下,尝试使用
c.Visit()
。它为每个请求创建新的上下文

另外,您不需要将URL存储在上下文中,它始终可以在
OnResponse
回调中使用
r.Request.URL

将日志消息更改为以下内容,以便能够查看真实的请求url:

log.Println(fmt.Sprintf(“%d已完成访问:%s”,pageCount,r.Request.URL))

如果使用
e.Request.Visit(link)
,则请求之间会共享
Ctx
,因此其他请求可能会覆盖数据。在这些情况下,尝试使用
c.Visit()
。它为每个请求创建新的上下文

另外,您不需要将URL存储在上下文中,它始终可以在
OnResponse
回调中使用
r.Request.URL

将日志消息更改为以下内容,以便能够查看真实的请求url:

log.Println(fmt.Sprintf(“%d已完成访问:%s”,pageCount,r.Request.URL))