Go语言之进阶篇爬捧腹网
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语言之进阶篇爬捧腹网相关推荐
- 视频教程-C语言程序设计--进阶篇教学视频-C/C++
C语言程序设计--进阶篇教学视频 烟台大学计算机学院教师,二十年余教师生涯,看出了在错综复杂的教育环境中,坚持教育教学的价值与前景.和学生并肩,与不良学风作斗争,为IT菜鸟建跑道,让大一的孩子会编程, ...
- java爬取捧腹网段子
先上效果图: 准备工作: /*** 建立http连接*/ public static String Connect(String address) {HttpURLConnection conn = ...
- python爬取捧腹网gif图片
#_*_coding:utf-8_*_ #爬取捧腹网GIF图片 import urllib,re import urllib.request import chardet #需要导入这个模块,检测编码 ...
- Go语言段子爬虫--捧腹网
最后我们来进行一次网络段子的爬虫,爬取捧腹网的段子数据 1.爬取网页的段子链接: 程序代码: package mainimport ("fmt""net/http&quo ...
- golang实现捧腹网爬取笑话
爬虫的步骤见:here 以下golang代码实现对捧腹网笑话的爬取,并保存到本地的joy文件夹(程序会自行创建)内 package mainimport ("fmt""n ...
- Golang实现并发版网络爬虫:捧腹网段子爬取并保存文件
爬取捧腹网段子 url分页分析 https://www.pengfu.com/xiaohua_1.html 1 下一页+1 https://www.pengfu.com/xiaohua_2.html ...
- java爬取捧腹网段子(多线程版)
前文链接 : java爬取捧腹网段子 上一篇文章讲述了如何使用Java爬取内容并写入文件,但是速度堪忧,今天将代码搞成了多线程版本, 具体方式如下: 新建一个splider类,继承callable接口 ...
- java 段子_java爬取捧腹网段子
先上效果图: 准备工作: /** * 建立http连接 */ public static String Connect(String address) { HttpURLConnection conn ...
- python爬虫之爬取捧腹网段子
原文链接:http://www.nicemxp.com/articles/12 背景:抓取捧腹网首页的段子和搞笑图片链接 如图: 地址:https://www.pengfu.com/ 首页中有很多子页 ...
最新文章
- taro 在components文件夹中 新建组件时,组件支持自定义命名,但是不能大写开头...
- centos 7 jenkins githup测试
- c语言猜四位数游戏猜10次,C语言猜数字游戏--随机生成4个不相同的数字从小到大排序,用户开始游戏,如果用户猜对数字和数字对应的位置,界面回馈A,如果数字正确位置不正确,则回馈B...
- 华为S5700交换机开启telnet远程登陆配置(推荐)
- 数据库设计 表和表之间的三种关系
- 物联网行业常用术语(含软件和硬件)
- CAD文字宽度因子无法修改解决办法
- Android视频录制命令screenrecord
- NutUI 京东小程序发布了!
- JavaScript总结笔记
- Ubuntu16.04运行LSD-SLAM
- 如何成为一个 IT 界的女装大佬?
- 双目九视清哺光仪_岳清江|坚定信念,普通人也能拥有非凡人生——【管鹏企业家书友会】...
- 计算机应用与需求相结合,计算机应用人才培养与企业需求的有效对接
- Docker run 容器处于created状态问题
- 实习第一个月体会和总结
- 外语学习强烈推荐Rosetta Stone
- Windows制作启动U盘太麻烦,用CMD快速解决
- web页面常见的错误
- 用java做音乐识别软件
热门文章
- 综合布线系统之7个子系统构成
- PageOffice如何控制在系统中打开Word文档只读
- sed -i 命令详解
- linux下运行htk,Linux下安装编译并且测试HTK语音识别库
- 8266接入华为hilink Demo之APP验证(三)
- Zemax光学设计(四)——几何像差
- 成为专业程序猿的配置(设置分屏、拓展分屏显示)
- BlockChange | 对话路印协议创始人王东:从谷歌工程师到区块链创业者,一个运营良好的区块链社区如何建设?
- 【C/C++】%2d,%02d是什么意思
- 树莓派(raspberry)安装无线网卡讯捷FW150US驱动