Sun*_*nil 1 timeout get http go
我正在制作一个抓取html,css和js页面的爬虫.爬虫是一个典型的爬虫,有4个go-routine同时运行以获取资源.为了学习,我一直在使用3个测试站点.爬虫工作正常并显示程序完成日志,同时测试其中两个.
然而,在第3个网站中,在获取css链接时发生了太多超时.这最终导致我的程序停止.它获取链接但在连续20多次超时后,程序停止显示日志.基本上它停止了.我不认为这是事件日志控制台的问题.
我需要单独处理超时吗?我没有发布完整的代码,因为它与我正在寻找的概念性答案无关.但是代码是这样的:
for {
site, more := <-sites
if more {
url, err := url.Parse(site)
if err != nil {
continue
}
response, error := http.Get(url.String())
if error != nil {
fmt.Println("There was an error with Get request: ", error.Error())
continue
}
// Crawl function
}
}
Run Code Online (Sandbox Code Playgroud)
http客户端的默认行为是永久阻止.创建客户端时设置超时:(http://godoc.org/net/http#Client)
func main() {
client := http.Client{
Timeout: time.Second * 30,
}
res, err := client.Get("http://www.google.com")
if err != nil {
panic(err)
}
fmt.Println(res)
}
Run Code Online (Sandbox Code Playgroud)
30秒Get后将返回错误.
| 归档时间: |
|
| 查看次数: |
53 次 |
| 最近记录: |