爬取豆瓣电影信息:

双向爬取:

横向:以页为单位。纵向:以一个页面内的条目为单位。

横向:

https://movie.douban.com/top250?start=0&filter= 1

https://movie.douban.com/top250?start=25&filter= 2

https://movie.douban.com/top250?start=50&filter= 3

https://movie.douban.com/top250?start=75&filter= 4

纵向:

电影名称: <img width="100" alt="电影名称"            ——> `<img width="100" alt="(.*?)"`分数:<span class="rating_num" property="v:average">分数</span> ——> `<span class="rating_num" property="v:average">(.*?)</span>`评分人数:<span> 评分人数   人评价</span>         ——> `<span>(.*?)人评价</span>`

---- 实现流程:

1.  获取用户输入 起始、终止页、启动 toWork 函数 循环 调用 SpiderPageDB(url) 爬取每一个页面2.  SpiderPageDB 中, 获取 豆瓣电影 横向爬取url 信息。封装 HttpGet 函数,爬取一个页面所有数据 存入 result 返回3.  找寻、探索豆瓣网页 纵向爬取规律。找出“电影名”、“分数”、“评分人数”网页数据特征。4. 分别 对这三部分数据使用 go 正则函数: 1) 解析、编译正则表达式 2) 提取信息 ——>  string[1]: 代表没有  匹配参考项内容。5. 将提取到的数据,按自定义格式写入文件。使用 网页编号命名文件。6. 实现并发。    1) go SpiderPageDB(url) 。 2) 创建 channel 防止主 go 程退出3) SpiderPageDB 函数末尾,写入 channel 4) 主 go 程 for  读取 channel 。
package mainimport ("fmt""strconv""net/http""io""regexp""os"
)// 爬取指定url 的页面,返回 result
func HttpGetDB(url string) (result string, err error)  {resp, err1 := http.Get(url)if err1 != nil {err = err1;return}defer resp.Body.Close()buf := make([]byte, 4096)// 循环爬取整页数据for {n, err2 := resp.Body.Read(buf)if n == 0 {break}if err2 != nil && err2 != io.EOF {err = err2return}result += string(buf[:n])}return
}func Save2file(idx int, filmName, filmScore, peopleNum [][]string)  {path := "C:/itcast/"+ "第 " + strconv.Itoa(idx) + " 页.txt"f, err := os.Create(path)if err != nil {fmt.Println("os.Create err:", err)return}defer f.Close()n := len(filmName)        // 得到 条目数。 应该是 25// 先打印 抬头  电影名称        评分         评分人数f.WriteString("电影名称" + "\t\t\t" + "评分" + "\t\t" + "评分人数" + "\n")for i:=0; i<n; i++ {f.WriteString(filmName[i][1] + "\t\t\t" + filmScore[i][1] + "\t\t" + peopleNum[i][1] + "\n")}
}// 爬取一个豆瓣页面数据信息
func SpiderPageDB(idx int, page chan int)  {// 获取 urlurl := "https://movie.douban.com/top250?start="+ strconv.Itoa((idx-1)*25) + "&filter="// 封装 HttpGet2 爬取 url 对应页面result, err := HttpGetDB(url)if err != nil {fmt.Println("HttpGet2 err:", err)return}//fmt.Println("result=", result)// 解析、编译正则表达式 —— 电影名称:ret1:= regexp.MustCompile(`<img width="100" alt="(?s:(.*?))"`)// 提取需要信息filmName := ret1.FindAllStringSubmatch(result, -1)// 解析、编译正则表达式 —— 分数:pattern := `<span class="rating_num" property="v:average">(?s:(.*?))</span>`ret2 := regexp.MustCompile(pattern)// 提取需要信息filmScore := ret2.FindAllStringSubmatch(result, -1)// 解析、编译正则表达式 —— 评分人数:ret3 := regexp.MustCompile(`<span>(?s:(\d*?))人评价</span>`)//ret3 := regexp.MustCompile(`<span>(.*?)人评价</span>`)// 提取需要信息peopleNum := ret3.FindAllStringSubmatch(result, -1)// 将提取的有用信息,封装到文件中。Save2file(idx, filmName, filmScore, peopleNum)// 与主go程配合 完成同步page <- idx
}func toWork(start, end int)  {fmt.Printf("正在爬取 %d 到 %d 页...\n", start, end)page := make(chan int)       //防止主go 程提前结束for i:=start; i<=end; i++ {go SpiderPageDB(i, page)}for i:=start; i<=end; i++ {fmt.Printf("第 %d 页爬取完毕\n", <-page)}
}func main()  {// 指定爬取起始、终止页var start, end intfmt.Print("请输入爬取的起始页(>=1):")fmt.Scan(&start)fmt.Print("请输入爬取的终止页(>=start):")fmt.Scan(&end)toWork(start, end)
}

Golang实现并发版网络爬虫:豆瓣-电影名人数评分爬取并保存文件相关推荐

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

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

  2. Golang实现并发版网络爬虫:斗鱼直播颜值区直播封面图片爬取并保存文件

    爬取斗鱼直播颜值区直播封面图片代码实现: 工作流程: 1. 明确目标 Url2. 发送请求,获取应答数据包. http.Get(url)3. 过滤 数据.提取有用信息. 4. 使用.分析得到数据信息. ...

  3. Python爬虫之豆瓣电影评论数据的爬取(十四)

    原创不易,转载前请注明博主的链接地址:Blessy_Zhu https://blog.csdn.net/weixin_42555080 本次代码的环境: 运行平台: Windows Python版本: ...

  4. Python网络爬虫数据采集实战:Scrapy框架爬取QQ音乐存入MongoDB

    ​    通过前七章的学习,相信大家对整个爬虫有了一个比较全貌的了解 ,其中分别涉及四个案例:静态网页爬取.动态Ajax网页爬取.Selenium浏览器模拟爬取和Fillder今日头条app爬取,基本 ...

  5. python爬取豆瓣电影并分析_Python爬取豆瓣电影的短评数据并进行词云分析处理

    前言 对于爬虫很不陌生,而爬虫最为经典的案例就是爬取豆瓣上面的电影数据了,今天小编就介绍一下如果爬取豆瓣上面电影影评,以<我不是药神>为例. 基本环境配置 版本:Python3.6 相关模 ...

  6. Python网络爬虫实例——“中国最好大学排名爬取”(嵩天:北理工大学)学习笔记

    这个例子比较简单也容易理解,我将细致的解析这个例子中算法流程.写一个博客算是给自己一个激励吧.一起加油.(_ZHJ三月和九月) 完整版代码 import requests from bs4 impor ...

  7. python爬电影排名用os bs4_Pyhton网络爬虫实例_豆瓣电影排行榜_BeautifulSoup4方法爬取...

    -----------------------------------------------------------学无止境------------------------------------- ...

  8. 爬虫笔记(七)——利用selenium对猫眼、豆瓣电影榜单的爬取

    系列文章目录 提示: 爬虫学习笔记(四)--糗百爬虫遇到的反爬 爬虫学习笔记(三)--利用JSON爬取豆瓣热映的使用 爬虫学习笔记(二):requests基础用法之爬取各类主流网站2 爬虫学习笔记(一 ...

  9. 【崔庆才教材】《Python3网络爬虫开发实战》3.4爬取猫眼电影排行代码更正(绕过美团验证码)

    前情提要 最近有七八个小伙伴私信问我说崔大神的<Python3网络爬虫开发实战>教材中 "3.4爬取猫眼电影排行" 一节的代码目前不能用. 首先附上崔大神的github ...

最新文章

  1. Python分析离散心率信号(上)
  2. 使用RedisDesktopManager客户端无法连接Redis服务器问题解决办法
  3. Vineyard 加入 CNCF Sandbox,将继续瞄准云原生大数据分析领域
  4. 【模型解读】GoogLeNet中的inception结构,你看懂了吗
  5. 线性链表java实现_java实现线性单链表
  6. C++是一种糟糕的语言 Linux之父炮轰C++
  7. 核销规则配置好之后 验证核销规则和本地测试过程
  8. linker command failed with exit code 1 (错误总结)
  9. 高通平台 ramdump-parser 简介
  10. Java实现音频格式转换 WAV—mp3,可使音频压缩
  11. itext7接口和类概述以及pdf常见操作
  12. 刮刮乐微信html5源码,微信小程序canvas实现刮刮乐效果
  13. SEO逆东子站生成和权重站提交工具
  14. 直流电机控制与TB6612FNG驱动芯片
  15. Git的基本概念和SourceTree的使用
  16. html网站模版用什么修改,网站后台模版html如何修改?网站模板能随便更改吗?...
  17. 线程池的使用(结合Future/Callable使用)
  18. 题目4(15分)对film_log1.csv文件进行重复值处理,并且打印出去掉的条数,然后保存到film_log2中。
  19. 访问WEB-INF目录中的JSP文件
  20. 第十一届蓝桥软件类JavaB组

热门文章

  1. Java取四位随机数
  2. 【电路】【扩展】锂电池相关知识补充
  3. 阿里OCR-图像文字的识别和理解
  4. 【人工智能】人工智能顶级研究所+人工智能顶级研究机构+人工智能顶级大学推荐!
  5. 计算机毕业设计SSM电子病历系统【附源码数据库】
  6. 谷歌眼镜活下去的唯一希望:开放软件系统
  7. HW1 游戏分类与热点探索
  8. Linux修改ip配置文件
  9. 【有限元分析】ANSYS Workbench定义新材料
  10. python remi库官网_python库介绍-PySimpleGUI-简单的GUI开发工具