go语言实现爬虫(爬两层)–捧腹网

代码

package mainimport ("fmt""net/http""os""regexp""strconv""strings"
)func main(){var start,end intfmt.Println("请输入起始页:")fmt.Scan(&start)fmt.Println("请输入终止页(大于等于起始页):")fmt.Scan(&end)DoWork(start,end)  //工作函数
}func DoWork(start,end int)  {fmt.Printf("正在爬取%d到%d之间的数据\n",start,end)page := make(chan int)//1、明确目标(要知道你准备再那个范围或者网站去搜索)for i:= start ; i <= end ; i++{go SpiderPage(i,page)}for i:= start ; i <= end ; i++{fmt.Printf("第%d歌页面爬取完成\n",<-page)}
}//爬一个网页
func SpiderPage(i int,page chan int){url := "https://www.pengfu.com/xiaohua_"+strconv.Itoa(i)+".html"fmt.Printf("正在爬取第%d页网页:%s\n",i,url)// 2、爬(将所有的网站的内容全部爬下来)result , err := HttpGet(url)if err != nil{fmt.Println("HttpGet err:",err)return}//取,<h1 class="dp-b"><a href="一个段子url连接"//解释关系式re := regexp.MustCompile(`<h1 class="dp-b"><a href="(?s:(.*?))"`)if re == nil{fmt.Println("regexp.MustCompile err")return}//取关键信息joyUrls := re.FindAllStringSubmatch(result,-1)fileTitle := make([]string,0)fileContent :=make([]string,0)//取网站//第一个返回下标,第二个返回内容for _,data := range joyUrls{//开始爬取每一个笑话,每一个段子title,content,err1 := SpiderOneJoy(data[1])if err1 != nil{fmt.Println(" SpiderOneJoy err",err1)continue}//fmt.Printf("title = #%v#",title)//fmt.Printf("content = #%v#",content)fileTitle = append(fileTitle,title)             //追加内容fileContent = append(fileContent,content)        //追加内容}//把内容存储到文件storeJoyToFile(i,fileTitle,fileContent)page <- i
}func HttpGet(url string) (result string , err error)  {resp,err1 := http.Get(url)if err1 != nil{err = err1return}defer resp.Body.Close()//读取网页body的内容buf := make([]byte,1024*4)for{n,_ := resp.Body.Read(buf)if n == 0 { //读取接受或者出错误break}result +=string(buf[:n])}return
}func SpiderOneJoy(url string)(title,content string,err error){// 爬(将所有的网站的内容全部爬下来)result , err2 := HttpGet(url)if err2 != nil{fmt.Println("HttpGet1 err:",err2)err = err2return}//取关键信息//取标题re1 := regexp.MustCompile(`<h1>(?s:(.*?))</h1>"`)if re1 == nil{err = fmt.Errorf("%s","regexp.MustCompile err")return}//取内容tmpTitle := re1.FindAllStringSubmatch(result,-1)   //最后一个参数为1,只过滤第一个for _,data := range tmpTitle{title = data[1]strings.Replace(title,"\t","",-1)break}//取内容re2 := regexp.MustCompile(`<div class="content-txt pt10">(?s:(.*?))<a id="prev" href="`)if re2 == nil{err = fmt.Errorf("%s","regexp.MustCompile err2")return}//取内容tmpContent := re2.FindAllStringSubmatch(result,-1)  //最后一个参数为1,只过滤第一个for _,data := range tmpContent{content = data[1]strings.Replace(content,"\t","",-1)strings.Replace(content,"\n","",-1)strings.Replace(content,"\r","",-1)strings.Replace(content,"<br />","",-1)break}return
}func storeJoyToFile(i int,fileTitle,fileContent []string){//新建文件f,err3 := os.Create(strconv.Itoa(i)+".txt")if err3 != nil{fmt.Println("os.Create err",err3)}defer f.Close()//写内容n := len(fileTitle)for i := 0 ; i < n ;i++  {//写标题f.WriteString(fileTitle[i]+"\n")//写内容f.WriteString(fileContent[i]+"\n")//分割f.WriteString("========================================="+"\n")}
}

go语言实现爬虫(爬两层)相关推荐

  1. 网络爬虫入门:网络爬虫的目的,企业获取数据的方式,可以用于做爬虫的程序语言,爬虫爬取数据的步骤

    目录 爬取数据的目的: 1.获取大量数据,用于做数据分析 2.公司项目的测试数据,公司业务所需数据 企业获取数据的方式 1.公司自有数据 2.第三方数据平台购买(数据堂,贵阳大数据交易所) 3.爬虫爬 ...

  2. Go语言并发爬虫,爬取空姐网所有相册图片

    转载地址:Go语言中文网 说到爬虫,不得不提到我自己写的<Python网络爬虫requests.bs4爬取空姐网图片>,可以在我的csdn看到这篇文章.这个爬虫很简洁,使用requests ...

  3. [蓝桥杯python] 秘密行动:小D接到一项任务,要求他爬到一座n层大厦的顶端与神秘人物会面。这座大厦有一个神奇的特点,每层的高度都不一样,同时,小D也拥有一项特殊能力,可以一次向上跳跃一层或两层

     [蓝桥杯python] 秘密行动 1.资源限制 2.输入格式 3.输出格式 4.样式输入及输出 5.代码及解析 大功告成!编写不易,大家成功后点个关注or赞谢谢~ 问题描述 小D接到一项任务,要求他 ...

  4. C语言C++开发魔塔游戏(两层)

    只写了两层,但是基本功能都能实现,部分效果图如下: 随便放一点代码,需要完整代码的可以加下QQ裙[八零六零四/一五九九]领取 #include "header.h" #includ ...

  5. C语言中阶第四篇:分支与循环语句练习,求阶乘的多种方法(两层for循环求阶乘)、二分查找、字符串汇聚以及模拟用户登录

    业精于勤荒于嬉,行成于思毁于随. 今天就来综合的联系一下前面的知识. 第十篇 一.for语句,两种方法计算阶乘 1.1.一层for循环求阶乘 1.2.实现阶乘累和 1.3.两层for循环求阶乘 二.i ...

  6. MATLAB爬虫爬取股票数据

    近年来,大数据盛行,有关爬虫的教程层次不穷.那么,爬虫到底是什么呢? 什么是爬虫? 百度百科是这样定义的: 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种 ...

  7. Scrapy豆瓣爬虫 爬取用户以及用户关注关系

    文章目录 明确任务 1.新建mysql数据库以及数据表 1.1 创建数据库 1.2 创建用户信息表users 1.3 创建用户关注表user_follows 笔记一: mysql中utf8与utf8m ...

  8. php抓取微博评论,python爬虫爬取微博评论案例详解

    前几天,杨超越编程大赛火了,大家都在报名参加,而我也是其中的一员. 在我们的项目中,我负责的是数据爬取这块,我主要是把对于杨超越 的每一条评论的相关信息. 数据格式:{"name" ...

  9. 【教程+实例】Python爬虫实例——用Python爬虫爬取bangumi上的galgame资讯

    文章目录 0.前言 1.什么是爬虫? 2.什么东西可以爬? 3.简易爬虫示例 4.如何筛选数据? 5.正则表达式 6.最终代码 如何修改代码,以适应自己的需求 效果截图 7.彩蛋 本人与知乎用户间宫羽 ...

最新文章

  1. python java web_Python 与 Java 使用 websocket 通信
  2. 【开源】SpringBootNetty聊天室V1.2.0升级版本介绍
  3. C# OpenGL 环境配置和入门程序
  4. 【竞赛相关】Kaggle活跃竞赛(12月汇总)
  5. linux生成表格文件大小,如何为linux中的文件夹生成清单(文件列表及其大小和数量)...
  6. java分桃子_猴子分桃子.java
  7. java图片上传被旋转,在其他大牛那看到的java手机图片上传旋转问题的解决方法...
  8. C语言笔记(关键字)
  9. 那些你不知道的 getClientRects()
  10. Ansible 安装
  11. MATLAB中的线性插值
  12. 用yacc编写的算术运算计算器_10天学会四则运算小计算器设计之第5天
  13. Android启动页欢迎界面大全 (网址)
  14. JS获取浏览器窗口大小 获取屏幕,浏览器,网页高度宽度
  15. 内网win10安装flash插件
  16. 鸡兔同笼:35个头,94只脚,问鸡、兔各多少只?
  17. 多项式秦九韶算法c语言
  18. Failed to obtain JDBC Connection; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsEx
  19. 蓝桥杯: 调手表【BFS】【Python】
  20. 自然语言处理研究方向--文本相似度论文合集(不断更新)

热门文章

  1. WebSocket请求获取请求头Sec-WebSocket-Protocol,以及正确返回响应
  2. 查看linux服务器网卡带宽
  3. FL1000型风电机组水冷系统用 风冷机组的研制
  4. 江西财经大学智慧江财登录分析
  5. 处理vcf文本设计多态性indel标记--GATK、vcf
  6. WSockExpert[抓包工具]
  7. matlab仿真瑞利分布与高斯分布
  8. Android 8.0(O版本)
  9. FFmpeg —— 由pts控制视频播放速率(Qt计时器)
  10. 汪~汪~汪~redisson的WatchDog是如何看家护院的?