在爬虫项目中,我认为通常会出现代理不可用的情况。所以,我想在OnError()
. 但是我无法获取在此请求中使用的 IP(为了从代理池中删除此 ip 以避免其他收集器从池中获取此 ip),我打印了r.Request.PorxyUrl
, 但是一个空字符串
p, _ := proxy.RoundRobinProxySwitcher("1.1.1.1", "2.2.2.2", "3.3.3.3")
c.SetProxyFunc(p)
// c.SetProxy("1.1.1.1")
c.OnError(func(r *colly.Response, e error) {
fmt.Println("------------------")
fmt.Println(r.Request.ProxyURL)
fmt.Println(e)
fmt.Println("------------------")
})
e := c.Visit("https://www.google.com")
fmt.Println(e)
我从标准输出得到这些:
------------------
<- proxyUrl ouput nothing
Get "https://www.google.com": proxyconnect tcp: dial tcp :0: connect: can't assign requested address
------------------
Get "https://www.google.com": proxyconnect tcp: dial tcp :0: connect: can't assign requested address
我没有在官方文档中找到有关代理错误的信息。所以,我只能使用查找密钥字符串,比如proxyconnect
在错误消息中定位代理错误?
还有一个问题是,如果我使用Retry()
,会不会切换到其他代理ip(假设不会重复切换)?