Go语言如何实现并发爬虫
发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,这篇文章将为大家详细讲解有关Go语言如何实现并发爬虫,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1. 单线程爬虫定义一个用户var Client http.Cli
千家信息网最后更新 2024年09月22日Go语言如何实现并发爬虫
这篇文章将为大家详细讲解有关Go语言如何实现并发爬虫,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
1. 单线程爬虫
定义一个用户
var Client http.Client
主函数
func main() { url := "http://localhost:3000/api/v1/products" start := time.Now() for i := 0; i < 10; i++ { Spider(url, i) } elapsed := time.Since(start) fmt.Printf("Time %s", elapsed)}
爬取函数
func Spider(url string, i int) { reqSpider, err := http.NewRequest("GET", url, nil) if err != nil { log.Fatal(err) } reqSpider.Header.Set("content-length", "0") reqSpider.Header.Set("accept", "*/*") reqSpider.Header.Set("x-requested-with", "XMLHttpRequest") respSpider, err := Client.Do(reqSpider) if err != nil { log.Fatal(err) } bodyText, _ := ioutil.ReadAll(respSpider.Body) var result Result _ = json.Unmarshal(bodyText, &result) fmt.Println(i,result.Data)}
运行时间为:651.8207ms
2. 多线程爬虫
2.1 channel main函数
我们构造一个无缓冲的通道,来阻塞主进程,等待子进程的执行。
func main() { url := "http://localhost:3000/api/v1/products" ch := make(chan bool) start := time.Now() for i := 0; i < 10; i++ { go Spider(url, ch, i) } for i := 0; i < 10; i++ { <-ch } elapsed := time.Since(start) fmt.Printf("Time %s", elapsed)}
最后记得在爬虫的结束的时候,把值写入到通道中,不然会一直阻塞主进程
运行时间:187.7921ms
比之前快了非常多。
2.2 sync.WaitGroup
定义一个进程组并加10个进程
var wg sync.WaitGroup wg.Add(10)
开辟十个goruntime
for i := 0; i < 10; i++ { go func(i int) { defer wg.Done() SpiderWaitGroup(url,i) }(i) }
阻塞主进程
wg.Wait()
结果:64.5246ms
3. 源码地址
GitHub地址:https://github.com/CocaineCong/Go-Spider-Demo
NormalStart(url) // 单线程爬虫 ChannelStart(url) // Channel多线程爬虫 WaitGroupStart(url) // Wait 多线程爬虫
其实多线程的两种都差不多的,只是有时候会因为机器的原因而导致一些误差。
关于"Go语言如何实现并发爬虫"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
爬虫
线程
进程
函数
篇文章
阻塞
语言
地址
时间
更多
通道
运行
不错
实用
差不多
内容
原因
只是
文章
时候
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
我为网络安全代言文字版
长宁区智能软件开发调试
网络安全技术沙盒
iss服务器安全
谷歌邮箱接收服务器密码
天翼云服务器登录亚马逊后台
牟平区管理系统软件开发企业
唐山软件开发枣庄
华为5g网络技术展
数云软件开发公司
数据库一直开着有事吗
免费windows永久云服务器
预防网络安全诈骗作文
软件维护可以改数据库吗
软件开发求职应聘文书
航务局网络安全设施设备单
网络技术起源于谁
建立服务器集群
网络技术安全管理规范
万方数据库有些论文只有引用
传奇一键清除数据库
服务器t1
5g网络安全行业风口
软件开发标书范文
远程办公网络安全风险
易语言自动更新网页数据库
幼儿网络安全课程主题
高级软件开发工程师报名条件
网络安全是国有产权交易的
服务器机房工作专业性强吗