原文连接:Hzy 博客

今天尝试来利用colly抓取一个图片网站并下载下来,还是挺好玩的。

接下来直接上代码了。
完整代码可以在我的github上,会一直更新一些学习go遇到的一些小问题,写一些小示例!
github

注意:

  • 需要添加cookies,否则会拒绝访问。
  • 一次请求好像最多就200个图片,及时参数调的在大也没有用,所以只好循环了。
  • 逻辑,使用一个收集器,抓取页面,在利用另一个收集器来,下载图片。
package mainimport ("bytes""encoding/json""fmt""github.com/gocolly/colly""github.com/gocolly/colly/extensions""io""net/url""os""strings""time"
)//todo:使用colly爬取https://www.quanjing.com中的卡通图片/*
1.先F12,观察https://www.quanjing.com/search.aspx?q=%E5%8D%A1%E9%80%9A#%E5%8D%A1%E9%80%9A||1|1000|3|2||||||这个网站
2.会发现其实这是一个通过json来加载数据的!通过这个URL:https://www.quanjing.com/Handler/SearchUrl.ashx
3. 我们在看看都传递了哪些参数,照着来就好啦。
*/func main(){t :=time.Now()c :=colly.NewCollector(func(collector *colly.Collector) {collector.Async=trueextensions.RandomUserAgent(collector)})imageC :=c.Clone()// 请求头c.OnRequest(func(r *colly.Request) {r.Headers.Set("Cookie","BIGipServerPools_Web_ssl=2135533760.47873.0000; Hm_lvt_c01558ab05fd344e898880e9fc1b65c4=1577432018; qimo_seosource_578c8dc0-6fab-11e8-ab7a-fda8d0606763=%E7%BB%94%E6%AC%8F%E5%94%B4; qimo_seokeywords_578c8dc0-6fab-11e8-ab7a-fda8d0606763=; accessId=578c8dc0-6fab-11e8-ab7a-fda8d0606763; pageViewNum=3; Hm_lpvt_c01558ab05fd344e898880e9fc1b65c4=1577432866")r.Headers.Add("referer", "https://www.quanjing.com/search.aspx?q=%E5%8D%A1%E9%80%9A")r.Headers.Add("sec-fetch-mode", "cors")r.Headers.Add("sec-fetch-site", "same-origin")r.Headers.Add("accept", "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01")r.Headers.Add("accept-encoding", "gzip, deflate, br")r.Headers.Add("accept-language", "en,zh-CN;q=0.9,zh;q=0.8")r.Headers.Add("X-Requested-With", "XMLHttpRequest")})//构造图片url,让图片imageC收集器来下载图片c.OnResponse(func(r *colly.Response) {var f interface{}if err := json.Unmarshal(r.Body[13:len(r.Body)-1], &f);err!=nil{panic(err)}imgList := f.(map[string]interface{})["imglist"]for k,img :=range imgList.([]interface{}){url :=img.(map[string]interface{})["imgurl"].(string)url = url +"#"+img.(map[string]interface{})["caption"].(string)fmt.Printf("find -->%d:%s\n",k,url)imageC.Visit(url)}})c.OnError(func(response *colly.Response, err error) {fmt.Println(err)})// 根据图片url来下载图片imageC.OnResponse(func(r *colly.Response) {fileName :=""caption :=strings.Split(r.Request.URL.String(),"#") // 获得刚刚#后面的信息if len(caption)>=2{ //这里要判断下没有信息的情况,要不然切片会越界fileName =caption[1] +".jpg"}else{fileName = "未知"}res, err := url.QueryUnescape(fileName) // 对url格式进行转换,要不然看不懂fileName = strings.Replace(res,",","_",-1)// 把信息中的逗号全部换成下换线,逗号文件命名会报错。fmt.Printf("下载 -->%s \n",fileName)f, err := os.Create("./download/"+fileName)if err != nil {panic(err)}io.Copy(f, bytes.NewReader(r.Body))})//构造URLpageSize:= 200 //需要下载图片的数量,pageNum :=10for i:=0;i<pageNum;i++{url :=fmt.Sprintf("https://www.quanjing.com/Handler/SearchUrl.ashx?t=1952&callback=searchresult&q=卡通A&stype=1&pagesize=%d&pagenum=%d&imageType=2&imageColor=&brand=&imageSType=&fr=1&sortFlag=1&imageUType=&btype=&authid=&_=1577435470818",pageSize,i)_ = c.Visit(url)}c.Wait()imageC.Wait()fmt.Printf("done,cost:%s\n",time.Since(t))
}

效果图

明天,在来看看用colly有哪些好玩的小项目!

go爬虫框架-colly实战(三)--全景卡通图片抓取下载相关推荐

  1. Python 爬虫 + 人脸检测 —— 知乎高颜值图片抓取

    1 数据源 知乎 话题『美女』下所有问题中回答所出现的图片 2 抓取工具 Python 3,并使用第三方库 Requests.lxml.AipFace,代码共 100 + 行 3 必要环境 Mac / ...

  2. Python爬虫入门,煎蛋网XXOO图片抓取!

    今天写一个爬虫爱好者特别喜欢的网站煎蛋网 http://jandan.net/ooxx ,这个网站其实还是有点意思的,网站很多人写了N多的教程了,各种方式的都有,当然网站本身在爬虫爱好者的不断进攻下, ...

  3. python爬取新浪微博数据中心_Python爬虫框架Scrapy实战之批量抓取招聘信息

    网络爬虫抓取特定网站网页的html数据,但是一个网站有上千上万条数据,我们不可能知道网站网页的url地址,所以,要有个技巧去抓取网站的所有html页面.Scrapy是纯Python实现的爬虫框架,用户 ...

  4. Colly 学习笔记(二)——爬虫框架,抓取下载数据(上证A股数据下载)

    Colly 学习笔记(二)--爬虫框架,抓取下载数据(上证A股数据下载) Colly 学习笔记(一)--爬虫框架,抓取中金公司行业市盈率数据 Colly 学习笔记(二)--爬虫框架,抓取下载数据(上证 ...

  5. Golang爬虫框架 colly 简介

    Golang爬虫框架 colly 简介 colly是一个采用Go语言编写的Web爬虫框架,旨在提供一个能够些任何爬虫/采集器/蜘蛛的简介模板,通过Colly.你可以轻松的从网站提取结构化数据,然后进行 ...

  6. Python框架篇:结构化的网页抓取框架-Scrapy

    前言 大家好,我是一身正气的辣条哥 今天主要跟大家分享一下Scrapy,Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的 ...

  7. python爬虫成长之路(一):抓取证券之星的股票数据

    python爬虫成长之路(一):抓取证券之星的股票数据 获取数据是数据分析中必不可少的一部分,而网络爬虫是是获取数据的一个重要渠道之一.鉴于此,我拾起了Python这把利器,开启了网络爬虫之路. 本篇 ...

  8. 【Python_Scrapy学习笔记(十三)】基于Scrapy框架的图片管道实现图片抓取

    基于Scrapy框架的图片管道实现图片抓取 前言 本文中介绍 如何基于 Scrapy 框架的图片管道实现图片抓取,并以抓取 360 图片为例进行展示. 正文 1.Scrapy框架抓取图片原理 利用 S ...

  9. Python爬虫之gif图片抓取

    Python爬虫之gif图片抓取 标签:图片爬虫 这几天,对于怎么去爬取图片很感兴趣,就研究了一下,图片爬虫可以说是有简单,更有复杂的,今天,我做了一个比较简单的gif的图片爬虫,仅仅学习一下怎么进行 ...

最新文章

  1. powerDesign设计随笔
  2. Android AudioPolicyService和AudioPolicyManager
  3. Asp.net Mvc问题索引
  4. python做exe开发教程_python做exe开发教程
  5. Spring OXM-XStream快速入门
  6. 文本文件、Excel文件上传下传
  7. Verilog自编函数clog2替代SV中的系统函数$clog2
  8. 关于python安装lxml插件的问题
  9. ASP.NET 4.0 取消表单危险字符验证
  10. java url authority,Java如何解析url,包括自定义schema的url
  11. 【2017年第4期】大数据标准体系
  12. 简单的学习一下node吧——还在学习中~~~
  13. denali vip使用经验
  14. 征服ASP.NET Ajax典型应用 (试读)
  15. 如何申请微信H5支付?
  16. 计算机一级office题库百度云,历年全国计算机等级考试一级MSOffice真题
  17. 5G 与 WIFI6 的对比
  18. 会员管理系统有哪些功能?
  19. opencv拟合多边形
  20. 数据中台系统架构设计

热门文章

  1. web版“节奏猜猜看“小工具-Web Workers+requestAnimationFrame+transition
  2. TCP、UDP报文格式
  3. 单片机c语言程序编译出现的警告 different types,warning C235: parameter 1: different types单片机程序编译的时候有警告...
  4. 查看linux的系统信息
  5. ​大数据和云计算技术周报(第41期) - 云+社区 - 腾讯云
  6. js的settimeout用法总结
  7. C 语言:#endif 指令
  8. 计算机教育杂志有核心期刊吗,计算机光盘软件与应用期刊_计算机科学与技术专业必修课_计算机科学与技术专业的好处...
  9. windows/电脑连接过的wifi密码查看,脚本查看wifi密码
  10. 热备份路由器协议 —— HSRP