package main

import (
"fmt"
"strconv"
"net/http"
"os"
"io"
) //百度贴吧的地址规律
//第一页:https://tieba.baidu.com/f?kw=%E7%BB%9D%E5%9C%B0%E6%B1%82%E7%94%9F&ie=utf-8(&pn=0)
//第二页:https://tieba.baidu.com/f?kw=%E7%BB%9D%E5%9C%B0%E6%B1%82%E7%94%9F&ie=utf-8&pn=50
//第三页:https://tieba.baidu.com/f?kw=%E7%BB%9D%E5%9C%B0%E6%B1%82%E7%94%9F&ie=utf-8&pn=100
//所以它的最后的数字每加50,代表着下一页 //整体提取的思路:
//1、先拿地址
//2、爬
//3、取
//4、存 func HttpGet(url string) (result string, err error) {
resp, err1 := http.Get(url)
if err != nil {
err = err1
return
}
defer resp.Body.Close()
//读取网页的body内容
buf := make([]byte, *)
for true {
n, err := resp.Body.Read(buf)
if err != nil {
if err == io.EOF{
fmt.Println("文件读取完毕")
break
}else {
fmt.Println("resp.Body.Read err = ", err)
break
}
}
result += string(buf[:n])
}
return
} func DoWork(start, end int) {
fmt.Printf("正在爬取第%d页到%d页\n", start, end)
for i:=start; i<=end; i++ {
url := "https://tieba.baidu.com/f?kw=%E7%BB%9D%E5%9C%B0%E6%B1%82%E7%94%9F&ie=utf-8&pn=" + strconv.Itoa((i-)*)
//爬,将所有的网页内容爬取下来
result, err := HttpGet(url)
if err != nil {
fmt.Println("http.Get err = ", err)
continue
}
//把内容写入到文件
filename := strconv.Itoa((i-)*) + ".html"
f, err1 := os.Create(filename)
if err1 != nil{
fmt.Println("os.Create err = ", err1)
continue
}
//写内容
f.WriteString(result)
//关闭文件
f.Close()
}
} func main() {
var start, end int
fmt.Printf("请输入起始页>=1:> ")
fmt.Scan(&start)
fmt.Printf("请输入结束页:> ")
fmt.Scan(&end)
DoWork(start, end)
}

最新文章

  1. 窥探Swift编程之错误处理与异常抛出
  2. You must use the Role Management Tool to install or configure Microsoft .NET Framework 3.5 SP1
  3. Nunit工具做C#的单元测试
  4. [Node.js] Scraping Dynamic JavaScript Websites with Nightmare
  5. 怎样使用svn开发项目
  6. linux常用命令详解 (一) 安装和登录命令
  7. WPF疑难杂症会诊
  8. nw.js桌面程序自动更新(node.js表白记)
  9. 0_Simple__cdpSimplePrint + 0_Simple__cdpSimpleQuicksort
  10. 【深度学习系列】用PaddlePaddle和Tensorflow实现经典CNN网络Vgg
  11. Codeforces round 1086
  12. PMP知识点(三)——挣值计算汇总表
  13. 复杂透视表的SQL生成方法
  14. Luogu P5283 / LOJ3048 【[十二省联考2019]异或粽子】
  15. 通过安装memadmin对memcache进行可视化管理
  16. Linux磁盘分区、挂载
  17. cStringIO 实现指定大小的字符串缓存
  18. Maven 那点事儿
  19. js简单时间比较的方法(转)
  20. USB设备被识别流程【转】

热门文章

  1. Linux性能监控 - CPU、Memory、IO、Network
  2. ECMAScript有6种继承方式(实现继承)
  3. c# 关键字学习
  4. 在Centos中导入sql文件的方法
  5. 第四章:重构代码[学习Android Studio汉化教程]
  6. 2.docker学习之linux安装
  7. 各自平台token获取解析及用户信息的获取
  8. ARP数据包伪造
  9. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 12—Support Vector Machines 支持向量机
  10. 消息队列—ActiveMQ