Go语言编写一个简单的并发小爬虫,爬取百度贴吧内容。这个小爬虫程序会在当前位置创建一个目录用于存储爬取的内容。Go语言天然的具有并发能力,这是语言特性,使用channel进行进程同步。通过Get方式访问网页,通过返回的*Response类型的变量获取其Body中的服务器端返回的数据。

具体源码如下(主要使用到的package包括:net/http,os):

package mainimport ("fmt""net/http""os""strconv"
)func main() {var strat, end intvar url_in stringfmt.Println("请输入贴吧url头")fmt.Scan(&url_in)fmt.Println("请输入起始页(>= 1)")fmt.Scan(&strat)fmt.Println("请输入终止页(>= 起始页)")fmt.Scan(&end)DoWork(url_in, strat, end)
}
func SpiderPage(url string, i int, page chan<- int) {fmt.Printf("正在爬取第%d 页,url= %s\n", i, url)result := *new(string)resp, err := http.Get(url)if err != nil {fmt.Println("http.Get err= ", err)return}defer resp.Body.Close()// 开始读取网页body内容buf := make([]byte, 4*1024)for {n, err := resp.Body.Read(buf)if n == 0 { // 读取结束或者出问题fmt.Println("resp.Body.Read err=", err)break}result += string(buf[:n])}//拼接文件名fileName := strconv.Itoa(i) + ".html"// 把内容写入到文件file, err2 := os.Create(fileName)if err2 != nil {fmt.Println("os.Create() err2= ", err2)}// 写入数据file.WriteString(result)// 关闭文件file.Close()page <- ireturn
}func DoWork(url_in string, strat, end int) {// 创建一个通道用于同步page := make(chan int)fmt.Printf("正在爬取第%d页至第%d页。。。\n", strat, end)// 明确爬取目标// https://tieba.baidu.com/f?kw=%E7%BB%9D%E5%9C%B0%E6%B1%82%E7%94%9F&ie=utf-8&pn=// 创建结果文件夹err1 := os.Mkdir("Result", os.ModeDir)if err1 != nil {fmt.Println("os.Mkdir err= ", err1)}// 修改工作目录e := os.Chdir("Result")if err1 != nil {fmt.Println("os.Chdir err= ", e)}for i := strat; i <= end; i++ {url := url_in + strconv.Itoa((i-1)*50)go SpiderPage(url, i, page)}for i := strat; i <= end; i++ {fmt.Printf("第%d页爬取完成!\n", <-page)}}

Go语言编写并发小爬虫相关推荐

  1. c语言编写数据存储的游戏,c语言经典小程序和c语言编写的小游戏带注释(自动保存的).doc...

    c语言经典小程序和c语言编写的小游戏带注释(自动保存的) 1.写一个定时?关机的小程?序,可以立即关?闭计算机,也可以一段?时间后关闭?计算机. #inclu?de #inclu?de #inclu? ...

  2. linux 剪刀石头布c语言,利用C语言编写“剪刀石头布”小游戏

    前言 大家好~ 我是一名C语言初学者,学了C语言基础后,我制作了一个小游戏:剪刀石头布. 希望大家能对我的思路和代码提出小Tips(eg.更简便的方法与程序) 我也会虚心接受大家的建议~ 一.游戏原理 ...

  3. 用C语言编写一个小游戏

    这是一个比较通用的方法来编写一个小游戏用 C 语言: 首先,确定游戏的目标和规则.这可能包括游戏的玩法.胜负条件.游戏元素和游戏流程等. 其次,确定游戏的用户界面.这可能包括游戏的菜单.按钮.文本框. ...

  4. C语言编写2048小游戏

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/104992424 2 ...

  5. C语言 编写“剪刀石头布”小游戏

    目录 前言 一.游戏原理 二.C语言代码 1.引入函数 2.初始页面显示 3.游戏过程及结果 总结 前言 大家好~ 我是一名C语言初学者,学了C语言基础后,我制作了一个小游戏:剪刀石头布. 希望大家能 ...

  6. 用c语言编写打猎小游戏,使用c语言编写简单小游戏.docx

    PAGE / NUMPAGES 纯真童趣的<泡泡堂>,还有武林情仇,笑傲江湖的<剑侠情缘on line>.它是e时代常谈的话题,是交互式娱乐的主力军,是一种 高层次的综合艺术, ...

  7. 钢琴软件c语言源代码,使用C语言编写钢琴小程序

    网上搜索键盘钢琴,可以搜索到不少小游戏,最常玩的就是Flash小游戏,26个按键的. 后来想用C语言自己实现一个,没有界面--控制台的. 原理很简单,先在控制台中获取按键事件,在按键事件中,开一个线程 ...

  8. 用C语言写钢琴小程序的代码,用C语言编写钢琴小程序

    网上搜索键盘钢琴,可以搜索到不少小游戏,最常玩的就是Flash小游戏,26个按键的 后来想用C语言自己实现一个,没有界面--控制台的.. 原理很简单,先在控制台中获取按键事件,在按键事件中,开一个线程 ...

  9. Linux C语言编写2048小游戏

    2048 2048小游戏是用Linux C语言写的,运行在Ubuntu系统上,其中Ubuntu链接Ncuses库.首先,我们简单了解一下Ncurses. Ncurses库是由原CURSES库发展而来的 ...

最新文章

  1. 远看像乱序执行,近看是内存屏障的 BUG 是如何解决的?
  2. ceph存储原理_【理论研究】漫谈传统IT基础设施10-存储(04)
  3. 存储1m图像错误_【1m 讲堂】“跨专业挑战空调施工常见错误,你敢来参加吗?”...
  4. 【前端就业课 第一阶段】HTML5 零基础到实战(十一)canvas 基础
  5. java打印数组_Java中打印数组内容的方式有哪些?
  6. rocketmq怎么保证数据不会重复_RocketMQ保证信息有序性和防止重复
  7. Linux多线程Pthread学习小结
  8. 最简单OGG配置方式
  9. WF4.0 Beta1 CancellationScope 取消容器
  10. InDesign CS3完全自学视频教程
  11. citrix终端linux,Citrix XenDesktop发布Centos 7.2桌面(六)--安装Linux VDA
  12. 赛码网刷题python
  13. 将sublime右下角永远改为HTML格式
  14. PnPUtil (PnPUtil.exe) 是一个命令行工具,使管理员可以执行以下操作驱动程序包
  15. js 对json对象排序 字符串 拼音等排序
  16. 《RCLane:Relay Chain Prediction for Lane Detection》论文笔记
  17. 一篇文章,搞懂自动化行业现状
  18. vue 使用gtm代码代替ga代码作谷歌分析
  19. 网络中存在的推广经验
  20. 双显示器(集成显卡不能显示,但独立显卡可以)

热门文章

  1. Windows10打开telnet功能
  2. 对scipy.cluster.vq中whiten()函数总结
  3. MAC端Android反编译工具及使用
  4. 软件黑盒测试的测评,软件评测师资料:黑盒测试与白盒测试例题
  5. 708-Linux内存管理实验
  6. linux应用程序开发_开发应用程序
  7. 关于企业建站有哪些好的方案?
  8. 评【TED】陆克文:中美注定要冲突吗?
  9. mac 下载安装git
  10. java generics_java – Generics中原始类型和?之间的区别