1、爬捧腹网

网页规律:

https://www.pengfu.com/xiaohua_1.html   下一页 +1

https://www.pengfu.com/xiaohua_2.html

主页面规律:

<h1 class="dp-b"><a href="  一个段子url连接   “

段子url:

<h1>    标题  </h1>  只取1个

<div class="content-txt pt10"> 段子内容 <a id="prew" href=">

2、爬捧腹网

示例: 并发版本

package mainimport ("fmt""net/http""os""regexp""strconv""strings"
)func HttpGet(url string) (result string, err error) {resp, err1 := http.Get(url) //发送get请求if err1 != nil {err = err1return}defer resp.Body.Close()//读取网页内容buf := make([]byte, 4*1024)for {n, _ := resp.Body.Read(buf)if n == 0 {break}result += string(buf[:n]) //累加读取的内容}return
}//开始爬取每一个笑话,每一个段子 title, content, err := SpiderOneJoy(url)
func SpiderOneJoy(url string) (title, content string, err error) {//开始爬取页面内容result, err1 := HttpGet(url)if err1 != nil {//fmt.Println("HttpGet err = ", err)err = err1return}//取关键信息//取标题  <h1>  标题 </h1>  只取1个re1 := regexp.MustCompile(`<h1>(?s:(.*?))</h1>`)if re1 == nil {//fmt.Println("regexp.MustCompile err")err = fmt.Errorf("%s", "regexp.MustCompile err")return}//取内容tmpTitle := re1.FindAllStringSubmatch(result, 1) //最后一个参数为1,只过滤第一个for _, data := range tmpTitle {title = data[1]//     title = strings.Replace(title, "\r", "", -1)//     title = strings.Replace(title, "\n", "", -1)//     title = strings.Replace(title, " ", "", -1)title = strings.Replace(title, "\t", "", -1)break}//取内容 <div class="content-txt pt10"> 段子内容 <a id="prev" href="re2 := regexp.MustCompile(`<div class="content-txt pt10">(?s:(.*?))<a id="prev" href="`)if re2 == nil {//fmt.Println("regexp.MustCompile err")err = fmt.Errorf("%s", "regexp.MustCompile err2")return}//取内容tmpContent := re2.FindAllStringSubmatch(result, -1)for _, data := range tmpContent {content = data[1]content = strings.Replace(content, "\t", "", -1)content = strings.Replace(content, "\n", "", -1)content = strings.Replace(content, "\r", "", -1)content = strings.Replace(content, "<br />", "", -1)break}return
}//把内容写入到文件
func StoreJoyToFile(i int, fileTitle, fileContent []string) {//新建文件f, err := os.Create(strconv.Itoa(i) + ".txt")if err != nil {fmt.Println("os.Create err = ", err)return}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=================================================================\n")}}func SpiderPape(i int, page chan int) {//明确爬取的url//https://www.pengfu.com/xiaohua_1.htmlurl := "https://www.pengfu.com/xiaohua_" + strconv.Itoa(i) + ".html"fmt.Printf("正在爬取第%d个网页:%s\n", i, url)//开始爬取页面内容result, err := HttpGet(url)if err != nil {fmt.Println("HttpGet err = ", err)return}//fmt.Println("r = ", result)//取,<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)//fmt.Println("joyUrls = ", joyUrls)fileTitle := make([]string, 0)fileContent := make([]string, 0)//取网址//第一个返回下标,第二个返回内容for _, data := range joyUrls {//fmt.Println("url = ", data[1])//开始爬取每一个笑话,每一个段子title, content, err := SpiderOneJoy(data[1])if err != nil {fmt.Println("SpiderOneJoy err = ", err)continue}//fmt.Printf("title = #%v#", title)//fmt.Printf("content = #%v#", content)fileTitle = append(fileTitle, title)       //追加内容fileContent = append(fileContent, content) //追加内容}//fmt.Println("fileTitle= ", fileTitle)//fmt.Println("fileContent= ", fileContent)//把内容写入到文件StoreJoyToFile(i, fileTitle, fileContent)page <- i //写内容,写num}func DoWork(start, end int) {fmt.Printf("准备爬取第%d页到%d页的网址\n", start, end)page := make(chan int)for i := start; i <= end; i++ {//定义一个函数,爬主页面go SpiderPape(i, page)}for i := start; i <= end; i++ {fmt.Printf("第%d个页面爬取完成\n", <-page)}}func main() {var start, end intfmt.Printf("请输入起始页( >= 1) :")fmt.Scan(&start)fmt.Printf("请输入终止页( >= 起始页) :")fmt.Scan(&end)DoWork(start, end) //工作函数
}

执行结果:

D:\GoFiles\src\hello_01>go run get_pengfu.go
请输入起始页( >= 1) :1
请输入终止页( >= 起始页) :5
准备爬取第1页到5页的网址
正在爬取第5个网页:https://www.pengfu.com/xiaohua_5.html
正在爬取第2个网页:https://www.pengfu.com/xiaohua_2.html
正在爬取第3个网页:https://www.pengfu.com/xiaohua_3.html
正在爬取第4个网页:https://www.pengfu.com/xiaohua_4.html
正在爬取第1个网页:https://www.pengfu.com/xiaohua_1.html
第4个页面爬取完成
第3个页面爬取完成
第1个页面爬取完成
第5个页面爬取完成
第2个页面爬取完成

  

转载于:https://www.cnblogs.com/nulige/p/10325753.html

Go语言之进阶篇爬捧腹网相关推荐

  1. 视频教程-C语言程序设计--进阶篇教学视频-C/C++

    C语言程序设计--进阶篇教学视频 烟台大学计算机学院教师,二十年余教师生涯,看出了在错综复杂的教育环境中,坚持教育教学的价值与前景.和学生并肩,与不良学风作斗争,为IT菜鸟建跑道,让大一的孩子会编程, ...

  2. java爬取捧腹网段子

    先上效果图: 准备工作: /*** 建立http连接*/ public static String Connect(String address) {HttpURLConnection conn = ...

  3. python爬取捧腹网gif图片

    #_*_coding:utf-8_*_ #爬取捧腹网GIF图片 import urllib,re import urllib.request import chardet #需要导入这个模块,检测编码 ...

  4. Go语言段子爬虫--捧腹网

    最后我们来进行一次网络段子的爬虫,爬取捧腹网的段子数据 1.爬取网页的段子链接: 程序代码: package mainimport ("fmt""net/http&quo ...

  5. golang实现捧腹网爬取笑话

    爬虫的步骤见:here 以下golang代码实现对捧腹网笑话的爬取,并保存到本地的joy文件夹(程序会自行创建)内 package mainimport ("fmt""n ...

  6. Golang实现并发版网络爬虫:捧腹网段子爬取并保存文件

    爬取捧腹网段子 url分页分析 https://www.pengfu.com/xiaohua_1.html 1 下一页+1 https://www.pengfu.com/xiaohua_2.html ...

  7. java爬取捧腹网段子(多线程版)

    前文链接 : java爬取捧腹网段子 上一篇文章讲述了如何使用Java爬取内容并写入文件,但是速度堪忧,今天将代码搞成了多线程版本, 具体方式如下: 新建一个splider类,继承callable接口 ...

  8. java 段子_java爬取捧腹网段子

    先上效果图: 准备工作: /** * 建立http连接 */ public static String Connect(String address) { HttpURLConnection conn ...

  9. python爬虫之爬取捧腹网段子

    原文链接:http://www.nicemxp.com/articles/12 背景:抓取捧腹网首页的段子和搞笑图片链接 如图: 地址:https://www.pengfu.com/ 首页中有很多子页 ...

最新文章

  1. taro 在components文件夹中 新建组件时,组件支持自定义命名,但是不能大写开头...
  2. centos 7 jenkins githup测试
  3. c语言猜四位数游戏猜10次,C语言猜数字游戏--随机生成4个不相同的数字从小到大排序,用户开始游戏,如果用户猜对数字和数字对应的位置,界面回馈A,如果数字正确位置不正确,则回馈B...
  4. 华为S5700交换机开启telnet远程登陆配置(推荐)
  5. 数据库设计 表和表之间的三种关系
  6. 物联网行业常用术语(含软件和硬件)
  7. CAD文字宽度因子无法修改解决办法
  8. Android视频录制命令screenrecord
  9. NutUI 京东小程序发布了!
  10. JavaScript总结笔记
  11. Ubuntu16.04运行LSD-SLAM
  12. 如何成为一个 IT 界的女装大佬?
  13. 双目九视清哺光仪_岳清江|坚定信念,普通人也能拥有非凡人生——【管鹏企业家书友会】...
  14. 计算机应用与需求相结合,计算机应用人才培养与企业需求的有效对接
  15. Docker run 容器处于created状态问题
  16. 实习第一个月体会和总结
  17. 外语学习强烈推荐Rosetta Stone
  18. Windows制作启动U盘太麻烦,用CMD快速解决
  19. web页面常见的错误
  20. 用java做音乐识别软件

热门文章

  1. 综合布线系统之7个子系统构成
  2. PageOffice如何控制在系统中打开Word文档只读
  3. sed -i 命令详解
  4. linux下运行htk,Linux下安装编译并且测试HTK语音识别库
  5. 8266接入华为hilink Demo之APP验证(三)
  6. Zemax光学设计(四)——几何像差
  7. 成为专业程序猿的配置(设置分屏、拓展分屏显示)
  8. BlockChange | 对话路印协议创始人王东:从谷歌工程师到区块链创业者,一个运营良好的区块链社区如何建设?
  9. 【C/C++】%2d,%02d是什么意思
  10. 树莓派(raspberry)安装无线网卡讯捷FW150US驱动