go实现抓妹子图片

Golang Colly爬取图片gorm存储数据 golang colly gorm 爬图 并 储存 阅读详情

1:学习练手用的
2:我也是看到http://www.oschina.net/code/snippet_2362573_48180这篇文章后发现妹子图这个网站结构比较简单,实现起来easy
3:代码还有很多优化的地方,怕老板看见只能回家搞了
4:欢迎指正

直接上代码

package main

import (
"bytes"
"fmt"
"io/ioutil"
"net/http"
"os"
"regexp"
"strconv"
)

const (
PATH string = "~/meizi" //文件存储路径
STARTURL string = "http://www.mzitu.com/model" //妹子图模块列表页url
CONCURRENCY int = 3 //并发下载数
)

var (
c1 chan string //通道:负责STARTURL,以后可以做成从命令参数里读取哦
c2 chan string //通道: 负责传输所有的模块url
c3 chan []string //通道:负责传输imgUrl
c4 chan int //通道: 负责传输每张图片的下载完成状态
c5 chan int //通道:负责传输当前下载数
)

func init() {
c1 = make(chan string, 1)
c2 = make(chan string, 100)
c3 = make(chan []string, 1000)
c4 = make(chan int, 3)
c5 = make(chan int, 10)
go CgetList()
go Cdownload()
}
func main() {
c1 <- STARTURL
go CgetModel()
num := 0
for count := range c5 {
num = num + count
fmt.Println("已下载:", num)
}
}

//调度器, 拉取所有模块
func CgetModel() {
modelPage := getPage(<-c1)
for i := 1; i <= modelPage; i++ {
modelUrl := STARTURL + "/page/" + strconv.Itoa(i)
c2 <- modelUrl
}
}

//调度器拉取所有图片url,这里其实还可以多分一层
func CgetList() {
k := 0
tmp := make([]string, 3)
for modelUrl := range c2 {
imgLists := getList(modelUrl)
for _, imgList := range imgLists {
imgPage := getPage(imgList)
for j := 1; j <= imgPage; j++ {
imgUrl := imgList + "/" + strconv.Itoa(j)
if k < CONCURRENCY {
tmp[k] = imgUrl
k++
} else {
c3 <- tmp
k = 0
}
}
}
if k != 0 {
c3 <- tmp
k = 0
}
}

}

//调度器, 下载图片
func Cdownload() {
for imgUrls := range c3 {
if len(imgUrls) > 0 {
for _, imgUrl := range imgUrls {
go func() {
download(imgUrl)
c4 <- 1
}()
}
num := 0
for k := range c4 {
num = num + k
if num == len(imgUrls) {
c5 <- num
break
}
}
}
}
}

//图片列表
func getList(url string) (l []string) {
reg, _ := regexp.Compile(`<h2><a href="(http://www.mzitu.com/\d*)" title="(.*?)" target="_blank">.*?</a></h2>`)
_, html, _ := getHtml(url)
lists := reg.FindAllStringSubmatch(html, 1000)
for _, list := range lists {
l = append(l, list[1])
}
return
}

//下载html
func getHtml(url string) (error, string, error) {
response, err := http.Get(url)
defer response.Body.Close()
html, err1 := ioutil.ReadAll(response.Body)
return err, string(html), err1
}

//获取最大分页
func getPage(url string) (page int) {
_, html, _ := getHtml(url)
reg, _ := regexp.Compile(`<span>(\d*)</span>`)
s := reg.FindAllStringSubmatch(html, 200)
if len(s) < 2 {
fmt.Println("获取失败")
os.Exit(-1)
}
page, _ = strconv.Atoi(s[len(s)-1][1])
return

}

//下载图片
func download(url string) {
reg, _ := regexp.Compile(`<p><a href="http:\/\/www.mzitu.com/.*?" ><img src="(.*?)" alt="(.*?)" /></a></p>`)
reg1, _ := regexp.Compile(`http:\/\/pic\.dofay\.com/(.*)`)
_, html, _ := getHtml(url)
iterms := reg.FindAllStringSubmatch(html, 100)
for _, iterm := range iterms {
imgUrl := iterm[1]
imgPath := reg1.FindAllStringSubmatch(imgUrl, 100)
imgPaths := bytes.Split([]byte(imgPath[0][1]), []byte("/"))
path := PATH + "/" // + iterm[2]
imgResponse, _ := http.Get(imgUrl)
defer imgResponse.Body.Close()
imgByte, _ := ioutil.ReadAll(imgResponse.Body)
pInfo, pErr := os.Stat(path)
if pErr != nil || pInfo.IsDir() == false {
errDir := os.Mkdir(path, os.ModePerm)
if errDir != nil {
fmt.Println(errDir)
os.Exit(-1)
}
}
fn := path + "/" + string(imgPaths[len(imgPaths)-1])
_, fErr := os.Stat(fn)
var fh *os.File
if fErr != nil {
fh, _ = os.Create(fn)
} else {
fh, _ = os.Open(fn)
}
defer fh.Close()
fh.Write(imgByte)
}
}
GO语言实现爬虫(实现文字和图片爬取) 代码:package main import ( "./goquery" "errors" "fmt" "io" "io/ioutil" "log" "net/http" "net/url" "os" "path/filepath" "strings" ) func 阅读详情

相关推荐

六种常见负载均衡算法(Go语言实现)

引言 你说妹子太多了,压力有点大,身体有点吃不消,有点支持不住了。 于是乎,你找了几个兄弟说:哥们,帮忙分担一下压力呗。于是你开始把这些妹子推向你兄弟的魔爪,把妹子一个个的介绍给你不同的兄弟,并且尽力撮合他们。PS: 当然自己得留点。 这大概就是负载均衡,你既充当着负载均衡器, 也充当着服务器, 你的兄弟就是个服务器。你的压力相比之下减少了很多,这就是负载均衡的作用。 用专业术语来说: 负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理

ClassmateLin的博客 2346

Go语学习笔记 - 文件操作(二) | 从零开始Go语言

Go语学习笔记 - 文件操作(二)

阿良的博客 2218

用74LS190和555定时器复刻经典交通灯:一个电子工程新手的实战避坑记录

本文记录了使用74LS190和555定时器复刻经典交通灯的实战过程,详细介绍了元件选型、电路搭建与调试的关键步骤。特别分享了555定时器参数设置、74LS190级联技巧以及状态机设计的避坑经验,为电子工程新手提供实用参考。

weixin_42629671的博客 307

go语言爬取图片(URL分析)

Go语言爬取网站图片 作为一个肥宅,想找好看的图片,而且我几天换一张壁纸,最近缺少新的图片了,就去某乎找网站,下图是发现的网站,里面有大量好看的图片,就想爬下来慢慢挑 网站地址 https://wall.alphacoders.com/tags.php?tid=229 步骤 1.分析每一页的url,每页变化的只有后面的数字,修改数字就可 https://wall.alphacoders.c...

qq_43791139的博客 2773

OBS直播美颜全攻略:从插件下载到参数调校一站式指南

本文提供OBS直播美颜插件从下载安装到参数调校的一站式指南。详细介绍了如何安全获取并安装OBS美颜插件,重点讲解了在OBS中添加美颜滤镜的核心步骤,并分享了磨皮、肤色调整、细节增强等关键参数的实战调校技巧,帮助主播打造自然、专业的直播形象。

weixin_29197835的博客 329

深入解析.Net中SM2与sm-crypto的跨平台加解密实践

本文深入探讨了在.Net平台与前端sm-crypto库之间实现SM2国密算法跨平台加解密的实践方案。针对对接中常见的密钥格式、密文拼接顺序(C1C3C2与C1C2C3)等核心难点,提供了基于BouncyCastle的完整工具类实现、前后端联调示例及问题排查指南,旨在帮助开发者构建安全、兼容的数据加密通道。

weixin_29322855的博客 370

go语言爬取图片

目录一、前言二、大概思路三、代码四、打印五、日志 一、前言 发现了一个网站 https://wall.alphacoders.com/ ,图片质量挺高,正好最近在学习go,就用go下载图片到本地 我记录一下,以便以后查看,代码肯定是有所不足,大家别笑话,看看就好。 [起始页截图 https://wall.alphacoders.com/finding_wallpapers.php ] 二、大概思路 1、https://wall.alphacoders.com/finding_wallpapers.php

夏已微凉、 2354

禾赛XT16 vs XT32激光雷达实测对比:选16线还是32线?看完这篇不纠结

本文深度评测禾赛XT16与XT32激光雷达的性能差异与应用选择。通过实测数据对比,分析16线与32线激光雷达在点云密度、动态场景适应性及与IMU协同工作等方面的表现,帮助用户根据自动驾驶、机器人等不同应用场景做出最优选型决策。

table的专栏 945

用python爬大一波美女妹子

python版本:2.7 和大家一起交流编程心得,如果代码有需要改进的地方,希望大家多提意见 一大波的妹子福利哦 #coding:utf-8 import urllib2,re,os from urllib import * from time import sleep class spider: def __init__(self): self.lst_girl=[]

小小家园 1964

MATLAB实战:5步搞定铣削稳定性叶瓣图(附完整代码解析)

本文提供了一份基于MATLAB的铣削稳定性叶瓣图实战指南。通过5个清晰步骤,从动力学原理出发,详细解析了利用半离散法构建稳定性判据、模块化代码设计、高效参数扫描及高级可视化的完整流程,并附有完整代码,帮助工程师快速预测和规避加工颤振,优化铣削工艺参数。

weixin_29197051的博客 196

不写代码,Cursor 10分钟开发1个APP!保姆级教程喂饭来了

做出第一个能运行的app,那种成就感真的很棒。虽然过程可能有点折腾,但只要耐心一点,问题都能解决。记住,遇到问题不要慌,现在有AI帮忙,大部分问题都能快速解决。重要的是迈出第一步,开始动手实践。你的第一个app可能很简单,但这是一个很好的开始。随着经验积累,你能做出的东西会越来越酷。现在就开始行动吧,说不定下个月你就能向朋友炫耀你自己做的app了!

chenhong007的博客 1551

这个Python爬虫神器太爽了,自动下载妹子图片!

作者:菜鸟哥来源:菜鸟学Python对于Python的自动化测试或者是爬虫开发者来说,对于selenium库想必都听说过,selenium本身是作为Web应用测试工具,但是作为爬虫工具也...

Python数据之道 1886

python sci sci-hub 爬论文

sci-hub 爬虫 后续加入对于时间的排序,下载最新文献 参考: https://www.guanjihuan.com/archives/6846 https://blog.youkuaiyun.com/czh2637750821/article/details/115508922

weixin_42783619的博客 3542

使用HttpClient实现一个简单爬虫,抓取煎蛋妹子图

第一篇文章,就从一个简单爬虫开始吧。 这只虫子的功能很简单,抓取到”煎蛋网xxoo”网页(http://jandan.net/ooxx/page-1537),解析出其中的妹子图,保存至本地。 先放结果: 从程序来讲,分为三个步骤: 1、发起一个http请求,获取返回的response内容; 2、解析内容,分离出有效图片的url; 3、根据这些图片的u

GarfieldEr007的专栏 3873

2024 年高教社杯全国大学生数学建模竞赛 E 题 交通流量管控 详细思路+matlab代码+python代码+论文范例

随着城市化进程的加快、机动车的快速普及,以及人们活动范围的不断扩大,城市道。景区周边道路上既有本地居民出行,也有过境车辆,化配置,在保证车辆通行的前提下,使得两条主路上的车流平均速度最大。对五一黄金周期间的数据进行分析,判定寻找停车位的巡游车辆,并估算假。相位通过的每辆车的信息,包括拍摄地点、行驶方向、拍摄时间和车牌号。济发展和百姓幸福感的一个“痛点”,是相关部门的棘手难题之一。纬中路交叉口,根据车流量的差异,可将一天分成若干个时段,估。是小镇中两条主路的情况:纬中路,从环西路到环东路,约。

YOLO 3310

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Go语言实现抓图实例

Go语言实现网页抓图功能。

纸上得来终觉浅,绝知此事要躬行 2424

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

发现一个舔狗福利!这个Python爬虫神器太爽了,自动下载妹子图片!

对于Python的自动化测试或者是爬虫开发者来说,对于selenium库想必都听说过,selenium本身是作为Web应用测试工具,但是作为爬虫工具也有很广泛的用途。Selenium虽然...

cainiao_python的博客 1860

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

golang 多线程爬虫

这是一个golang爬虫demo 爬去一个美女图片网站的首页所有图片 采用golang 多线程的方式爬取图片 将爬到的图片保存到本地 代码中有用到goquery 网页数据解析框架 chan 控制goroutine 进行下载 http://www.umei.cc/ 一个妹子图片网站 请求的 header 必须带着 Referer 否则404 (比较简单的一种反爬虫策略) 用wireshark 抓

地球流浪猫的博客 5301

go string 换行_小猿圈分享-5.20用Go做一个表白图

马上到520了,很多人都说我们IT人不懂浪漫,今天小猿圈就给大家分享一个通过使用go语言来做一个表白图,让女神刮目相看,也祝福我们所有的IT人都能找到自己心仪的姑娘! 直接上码,说明都在代码中 /*先定义一个函数 参数: imgPath: 图片路径 size: 生成文本后的尺寸(这个不是真实的尺寸,1代表1个像素,1个像素会被替换成1个字符,所以是字符...

weixin_30291121的博客 174

小猿圈分享-5.20用Go做一个表白图

马上到520了,很多人都说我们IT人不懂浪漫,今天小猿圈就给大家分享一个通过使用go语言来做一个表白图,让女神刮目相看,也祝福我们所有的IT人都能找到自己心仪的姑娘! 直接上码,说明都在代码中 /*先定义一个函数 参数: imgPath: 图片路径 size: 生成文本后的尺寸(这个不是真实的尺寸,1代表1个像素,1个像素会被替换成1个字符,所以是字符的个数,高度是自动换算的,所以这里的size指...

乐乐老师的博客 867

哇塞!提速72倍,在Python里面调用Golang函数

点击上方“菜鸟学Python”,选择“星标”公众号超级无敌干货第一时间推给你!!!我们知道,在涉及到大量 CPU 计算的时候,Python 的运行效率可能不如其他语言。在之前的一篇文章:...

cainiao_python的博客 448

python 福利_发现一个舔狗福利!这个Python爬虫神器太爽了,自动下载妹子图片!...

对于Python的自动化测试或者是爬虫开发者来说,对于selenium库想必都听说过,selenium本身是作为Web应用测试工具,但是作为爬虫工具也有很广泛的用途。Selenium虽然好用,但是它大多数的时刻都是和Web的网页元素之间打交道,需要用到html网页的标签,CSS选择器等知识。虽然自动化程度较高,但是使用起来仍然不是很方便,上手也不是很容易。今天,小编就带领大家来认识一款基于Sele...

weixin_39737240的博客 268

Go语言爱好者周刊:第 145 期 — 它们相等吗?

这里记录每周值得分享的 Go 语言相关内容,周日发布。本周刊开源(GitHub:polaris1119/golangweekly[1]),欢迎投稿,推荐或自荐文章/软件/资源等,请提交 issue[2] 。鉴于一些人可能没法坚持把英文文章看完,因此,周刊中会尽可能推荐优质的中文文章。优秀的英文文章,我们的 GCTT 组织会进行翻译。由于微信公众号不支持外链,文中大量链接可...

Seekload 355

go开源项目整理-新手篇

参考链接: https://studygolang.com/articles/7708 下面推荐几款适合学习的项目: 小弟以前对IM聊天工具和爬虫情有独钟,所以选择的入手开源项目是 Pholcus(幽灵蛛)一块开源的分布式爬虫。 后续也可以和python开源爬虫框架scrapy一起对照学习1、cache2go https://github.com/muesli/cache2go比较简单的

脚踏实地,不断突破自我,每天有收获就OK 2万+

小白抓虫

小白学爬虫(一)- 之初识爬虫 世界上80%的爬虫是基于Python开发的,学好爬虫技能,可为后续的大数据分析、挖掘、机器学习等提供重要的数据源。 整理这个文档资料希望能对小伙伴有帮助。 什么是爬虫? 网络爬虫(又...

diantu3011的专栏 114

用Python找到了隔壁蹭网妹子的QQ号

来源:Leo说点事最近发现晚上有人老是在蹭网,而且严重怀疑是我的美女单身邻居,这可是千载难逢的好机会。于是我用Python轻松找到了它的QQ号,开始了我的桃花之旅......下面给大家介绍...

cainiao_python的博客 299
上一篇: go学习笔记--多数组合并
下一篇: go语言学习笔记---非入侵式接口设计探究
vspeter
博客等级 码龄15年 5粉丝 45原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值