用Go写的爬取网站上的图片

Golang编写的爬取网页图片的小程序 学习Golang语言也有一段时间了,对Golang的一些特性和优点也了解了不少,工作闲暇之余写了个爬取网页图片的小工具玩,有喜欢的码友可以下载下来编译玩玩,项目代码路径:https://github.com/xiezhijun/spidderGO.git 代码中主要是用 go 和 channel 配合使用,开启多个线程并发处理,一边爬取并解析网页,一边下载图片,如图所示: waitG... 阅读详情

用Go写的爬取网站上的图片

package main

import (
	"fmt"
	"io"
	"log"
	"net/http"
	"os"
	"strings"
	"sync"

	"golang.org/x/net/html"
)

//打开互斥锁
var wg sync.WaitGroup

//获取网页里面包含jpg和htm的url并保存成切片
func getHtml(url string) ([]string, error) {
	res, err := http.Get(url)
	if err != nil {
		log.Fatal(err)
		return nil, err
	}
	defer res.Body.Close()
	htmlNode, err := html.Parse(res.Body)
	if err != nil {
		log.Fatal(err)
		return nil, err
	}
	imgUrlSlice := getImage(htmlNode, nil)
	return imgUrlSlice, nil
}

//递归调用DOM节点
func getImage(n *html.Node, imgSlice []string) []string {
	if n.Type == html.ElementNode || n.Data == "IMG" {
		for _, v := range n.Attr {
			imgSlice = append(imgSlice, v.Val)
		}
	}
	for c := n.FirstChild; c != nil; c = c.NextSibling {
		imgSlice = getImage(c, imgSlice)
	}
	return imgSlice
}

//下载并保存图片
func downPic(path, url string) {
	idx := strings.LastIndex(url, "/") + 1
	if idx < 0 {
		fmt.Println("获取文件url错误")
		return
	}
	filename := url[idx:]
	fp, err := os.Create(path + filename)
	if err != nil {
		log.Fatal(err)
	}
	defer fp.Close()
	res, err := http.Get(url)
	if err != nil {
		log.Fatal(err)
		return
	}
	defer res.Body.Close()
	io.Copy(fp, res.Body)
	wg.Done()
}
func main() {
	var picSlice = make([]string, 0)
	var htmSlice = make([]string, 0)
	var domain = "http://big5.cri.cn"
	url := domain + "/gate/big5/news.cri.cn/gb/9964/2007/08/27/1326@1734234.htm"
	/*
		1、首先lice获取到的是一个杂乱无章的jpg和htm组和的切片,而且有些图片也不是我想要的图片,可以过滤来实现
		2、循环切片如果是jpg的图片就存到picSlice切片中,如果是htm的网页就存到htmSlice切片中
		3、循环htmlSlice保存的页面,并继续过滤网页里面的jpg图片并追加保存到picSlice切片中
		4、利用多个协程把图片下载到文件夹下面
	*/
	slice, _ := getHtml(url)
	for _, v := range slice {
		if strings.Contains(v, "mmsource") {
			picSlice = append(picSlice, v)
		} else if strings.Contains(v, "9964") {
			htmSlice = append(htmSlice, v)
		}
	}
	for i := 0; i < len(htmSlice); i++ {
		slice2, _ := getHtml(domain + htmSlice[i])
		for _, v := range slice2 {
			if strings.Contains(v, "mmsource") {
				picSlice = append(picSlice, v)
			}
		}
	}
	wg.Add(len(picSlice))
	for _, v := range picSlice {
		go downPic("pic/", domain+v)
	}
	wg.Wait()
	fmt.Println("已经完成")
}
Go语言爬虫项目实战:按标签爬取今日头条文章图片 Go语言,又称Golang,由Google开发,旨在解决多核心处理器和网络服务的软件开发问题。Go语言的设计哲学强调简洁、快速和安全,它的并发模型、内存安全机制以及丰富的标准库使得开发效率大幅提升。 阅读详情

相关推荐

Go语言下载网络图片或文件的方法示例

主要介绍了Go语言下载网络图片或文件的方法示例,文中通过示例代码介绍的非常详细,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

使用go语言来下载图片

接着,我们检查响应码是否为200。若响应码不为200,意味着服务器未正常响应,这时应该输出错误信息并退出程序。首先,我们需要发送HTTP请求来获取要下载的文件。代码中使用了Go语言内置的。方法向指定URL地址发送GET请求,获取响应结果。这里要注意,如果请求失败,若写入文件过程中出现错误,应该输出错误信息并退出程序。然后,我们需要将响应体的内容写入文件中。方法读取响应体中的所有内容,并将其保存到。好的,来一步步分析该代码的执行流程。至此,整个下载文件的过程就完成了。最后,不要忘记关闭响应体。

m0_63342293的博客 1509

golang抓取网页并分析页面包含的链接方法

今天小编就为大家分享一篇golang抓取网页并分析页面包含的链接方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

Go语言下载网络图片

每个编程语言中文件操作、字符串操作都是最基本的功能,需要熟练掌握应用。 下载网络图片,并将文件保存到本地路径,本文就介绍go语言中的一个实现示例。 实现思路: 函数定义中包含保存文件路径以及图片的http地址,首先需要根据图片http地址截取其最后一段作为文件名,然后使用go语言自带的http库请求获取图片,最后将获取到结果保存到文件中。 实现代码如下: package main import ( "fmt" "io/ioutil" "net/http" "strings" ) // 下载图.

togolife的博客 3832

STM32超声波避障小车硬件设计与实时测距实现

超声波测距是嵌入式系统中经典的环境感知技术,其原理基于声波在空气中的传播时间与距离的线性关系,通过精确计时实现非接触式距离测量。该技术具备成本低、抗光干扰强、算法简洁等优势,广泛应用于智能小车、机器人避障、液位监测等场景。工程落地的关键在于硬件信号完整性(如5V/3.3V电平匹配)、微秒级定时精度(依赖高稳定外部晶振与输入捕获模式)以及强干扰环境下的数据鲁棒性(需软硬协同滤波)。本文以STM32F103C8T6为平台,深入解析HC-SR04模块的时序闭环控制、TIM3输入捕获双沿测量、L298N电机状态机驱

weixin_42578963的博客 296

【Unity】【模型】【AI建模】如何将AI生成的GLB格式3D模型文件导入Unity

本文介绍了一个将AI工具自动生成的GLB格式3D模型文件转换成fbx模型文件导入Unity的步骤。

O青草O的博客 Unity和游戏制作知识分享 1359

如何用golang搜索抓取淘宝商品

package main import ( "fmt" "log" "os" "strings" "sync" "./php" "github.com/tealeg/xlsx" ) var wg sync.WaitGroup //定义一个同步等待的组 func main() { fileName :...

weixin_33725807的博客 624

mongoDB 数据莫名其妙的没了

问题 之前没有接触过mongoDB,然后接手一个项目使用的是MongoDB,我就跟着网上的教程搭建一个MongoDB的服务,并运行起来。 一开始没有啥问题,成功的把服务与MongoDB都启动以来,运行也没有问题。但是过了几天,我再次打开时发现,以前的数据神奇的消失了。我还在想,是有什么定时清除的么,还是什么原因导致崩了然后数据就被清理了。 查找原因 第一次遇到我没有在意,重启了一下MongoDB,...

技术熊的博客小窝 1万+

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

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

qq_43791139的博客 2773

Ollama部署本地大模型详细教程

创建ModelfilePARAMETER num_gpu 50 # GPU 层卸载比例(0~100)场景是否推荐本地开发/测试 Agent✅ 强烈推荐内部知识库问答(RAG)✅ 推荐(配合 Pgvector)生产环境高并发服务⚠️ 谨慎(建议评估 vLLM / Triton)需要 Function Calling 的 Agent❌ 不推荐(改用 DashScope API)🔑核心价值Ollama 是“本地大模型的 Docker”——让开源模型像容器一样 easy to run。

我们的征途是星辰大海 2630

MCU工程迁移实战:从STM32到MSPM0L1306的完整指南

在嵌入式系统开发中,MCU工程迁移是开发者常面临的核心挑战,涉及从旧平台向新芯片的完整适配。其原理在于不同MCU在硬件架构、外设寄存器映射、时钟树及开发工具链上存在差异,迁移的本质是将应用逻辑与底层硬件实现解耦。这一过程的技术价值在于提升代码复用性、降低硬件切换成本,并确保产品能快速响应供应链或技术栈变化。典型应用场景包括产品升级换代、芯片缺货替代以及技术生态统一。本文以TI MSPM0L1306为例,详解如何通过对比清单分析、DriverLib API替换及分步调试,高效完成从STM32等平台到Arm C

weixin_27625589的博客 330

go语言爬取图片

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

夏已微凉、 2354

基于知识图谱的电影推荐系统——Neo4j&Python

也可直接从这里下载:链接: https://pan.baidu.com/s/1l6wjwcUzy5G_dIlVDbCkpw 提取码: pkq6。修改main.py中的driver,输入自己数据库的用户名与密码。系统会询问是否需要重新加载并创建知识图谱,在第一次时输入1。

weixin_46351593的博客 6356

go-colly爬取图片-以基恩士网站为例

爬取基恩士网站主页上的产品图,以下是一个简单的示例,注意要先创建对应的目录。 最开始我发表在:https://www.jianshu.com/p/cda08dde65cd package main import ( "fmt" "github.com/gocolly/colly" "io" "net/http" "os" ) // global varia...

向水一生的博客 902

Python爬虫实战:利用最新技术爬取抖音话题挑战视频

本文将详细介绍如何使用Python最新技术栈构建一个高效的抖音话题挑战视频爬虫。我们将从环境配置开始,逐步讲解请求模拟、数据解析、反反爬策略、数据存储等关键环节,并提供完整的代码实现。本文适合有一定Python基础的开发者学习高级网络爬虫技术。关键词:Python爬虫、抖音API、话题挑战、视频爬取、反反爬本文详细介绍了如何使用Python最新技术栈构建抖音话题挑战视频爬虫。我们从基础请求开始,逐步实现了数据解析、反反爬策略、数据存储等核心功能,并探讨了分布式和增量爬取等高级主题。更智能的反反爬策略。

2201_76125261的博客 1744

【OS】AUTOSAR架构下MCAL Modules软件分区问题分析

AUTOSAR架构下MCAL Modules软件分区问题分析

qq_36056498的博客 939

Go使用chromedp库操作headless-chrome爬取"JS画出来的"网站

随着类似Vue、Angular这类通过JS将web页面"画"出来的前端框架的流行,爬取网页不再像以前那样随便发个GET请求,解析HTML就能搞定了。对于使用这类框架制作的SPA(Single Page Web Application)网站来说,必须使用一个全功能浏览器将JS脚本执行一遍才能获得想要的数据,除此之外别无他法。这里我们介绍如何使用Go语言的chromedp库来操作headless-chrome模拟浏览器操作,然后抓取网页数据的方案。 "无头"Chrome与远程调式协议 所谓headless-ch

停止更新 4120

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Go语言学习之Go爬虫爬取图片信息

在Golang学习过程中,想到以往学习过的语言可以做爬虫,突发奇想,也用Go做了一个爬虫来爬取图片,以做困乏之时消遣作乐,话不多言,先上代码 package main import ( "fmt" "log" "strconv" "github.com/PuerkitoBio/goquery" // 解析html //"io/ioutil" "net/http" &qu

qq_35924874的博客 3187

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

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

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

GoLang爬取花瓣网美女图片

由于之前一直想爬取花瓣网(http://huaban.com/partner/uc/aimeinv/pins/) 的图片,又迫于没时间,所以拖了很久。 鉴于最近在学go语言,就刚好用这个练手了。 预览 进入网站后,首页大概是这个样子 分析 网站采用的流式布局,动态加载。未经渲染的初始页面源代码中包含有20张图片的相关信息。 每张图片有它的pin_id和key, pin_id差不多就是id,而k...

Asche的博客 1486

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Go爬取美女壁纸图片

文章目录前言开始动手代码 前言 最近正好在学习和使用Go相关的东西,想起来上一次GAN生成女朋友的图片始终不理想,很可能就是因为数据集的质量不够,所以这次想着用Go重新爬点图片玩玩。 目标网址:美女壁纸 开始动手 这个网页很简单,一看url最后是1,随便打开第二页发现是2,那很明显直接for loop里面改变最后的页数就可以实现翻页爬取了。 再来看看网页中的图片url 全部都是https?://uploadfile.bizhizu.cn\... .jpg/ 所以处理起来也很简单,直接正则匹配每一页中所有

shelgi的博客 676

[golang爬虫实战]爬取热门表情图片

基于golang写个爬虫尽然这么简单!

夏日白云的boke 1008

Go语言爬虫实战(线程池)

可以通过对网站的观察我们可以发现网站各个页面之间微小的变化,然后将需要爬取的网页存储在一个切片当中,之后重复第一步即可。通过观察Html文本中图片的地址,并写出对应的正则表达式,匹配所有符合的图片信息。保存正则表达式的匹配结果,并对其发起GET请求获取图片资源信息。在存储图片的时候,获取图片的后缀以及获取图片原名称来命名图片。细节:通过浏览器的开发者模式,可以更快找到图片的地址。对指定URL发去GET请求,获取对应的响应。通过返回的响应获取网站的Html文本内容。// HandleError 错误。

JUIU9527的博客 2008

Go 语言的堆糖图片爬虫

这次基于 Go 语言的堆糖图片爬取尝试,是一次极具价值的技术实践。通过合理运用 goquery 和 regexp 等库,基本实现了对堆糖网图片资源的自动化抓取。不仅满足了个人对于特定图片的获取需求,更深入了解了网络爬虫的工作原理和实现细节。在未来,可以进一步优化爬虫的性能,如添加代理 IP 池、提高反反爬能力等,以应对复杂的网络环境。同时,可以将爬取到的图片链接进行更深入的处理,如批量下载、分类存储等,构建一个更加完善的图片资源获取与管理工具。

weixin_73833086的博客 1115

异步爬取网站的图片

看了好多文章,发送请求的代码都是aiohttp.request,但是这个似乎是老版本的。 新版本的改成了要用在aiohttp.ClientSession环境下使用session来发送请求。 import requests import asyncio import aiohttp import random import sys import os def get_proxy(): ...

坑底Z蛙 709

获取相册所有uri_Go语言进阶之路:并发爬虫,爬取空姐网所有相册图片

上次聊到了《Go语言进阶之路(八):正则表达式》和《Go语言进阶之路:手撸一个LRU缓存》,这次利用正则表达式来编写一个并发爬虫。私信“空姐”获取本爬虫源码!说到爬虫,不得不提到前面写的《Python网络爬虫requests、bs4爬取空姐网图片》。这个爬虫很简洁,使用requests库发送http请求,使用bs4来解析html元素,获取所有图片地址。但是这个爬虫是单线程爬虫,速度太慢,一分钟只能...

weixin_36422050的博客 208
上一篇: ubuntu下Mariadb-10.3.29远程root访问
下一篇: Golang用POST方法发送JSON数据到服务器
暗夜编码人
博客等级 码龄7年 1粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值