今天整理资料,惊奇发现去年7月份参加GDG的“七周七语言”活动时候,写的一个Go语言程序的。程序很简单,主要是访问一个博客网站,下载并保存网页,具体要求请见
http://be001.com/jams/110
先上程序:
package main
import (
"fmt"
"os"
"log"
"net/http"
"io/ioutil"
"bytes"
"encoding/base64"
"path"
"strings"
"regexp"
)
const (
BASEURL = "http://blog.csdn.net/xushiweizh"
PATTERN = "href=\"([^<\"]+)\""
INDEX = len(BASEURL)
ROOT = "C:/docs/GoCode/disk/"
)
func getContent(url string) string{
resp,err := http.Get(url)
if err != nil{
//handle error
log.Fatal(err)
}
defer resp.Body.Close()
body,err := ioutil.ReadAll(resp.Body)
return string(body)
}
func base64Encoding(s string)string{
var buf bytes.Buffer
encoder := base64.NewEncoder(base64.StdEncoding, &buf)
defer encoder.Close()
encoder.Write([]byte(s))
return buf.String()
}
func saveFile(content,filename string)error{
base64Name := base64Encoding(filename)
if base64Name == "" {
return nil
}
fout,err := os.Create(path.Join(ROOT,base64Name))
defer fout.Close()
if err != nil{
//handler error
log.Fatal(err)
return err
}
for _,line := range strings.Split(content,"\r\n"){
fout.WriteString(line + "\r\n")
}
return nil
}
func save(url string,links map[string]bool){
content := getContent(url)
err := saveFile(content,url[INDEX:])
if err != nil{
log.Fatal(err)
}
links[url]=true
}
func traverse(regxp *regexp.Regexp, url string, links map[string]bool){
LAST := strings.LastIndex(BASEURL,"/")
for _, scan := range regxp.FindAllStringSubmatch(getContent(BASEURL),-1){
var url string
if strings.Contains(scan[1],"http://"){
if strings.Contains(scan[1],BASEURL){
url = scan[1]
}else{
continue
}
}else{
if strings.Contains(scan[1],BASEURL[LAST:]){
url = BASEURL[:LAST]+scan[1]
}else{
continue
}
}
if v,ok := links[url];ok{
if v == true {
fmt.Println("Has download")
}else{
save(url,links)
}
}else{
save(url,links)
}
}
}
func main(){
links := make(map[string] bool)
regxp,err := regexp.Compile(PATTERN)
if err != nil{
log.Fatal(err)
}
traverse(regxp,BASEURL,links)
for key,val := range links{
if !val{
traverse(regxp,key,links)
}
}
}
分享到:
相关推荐
如何实现一个爬虫系统或则简单的小脚本?一般是定义一个入口页面,然后一个页面会有其他页面...golang由于其编译速度很快,而且对并发(goroutine)的天然支持,配合chan的协程处理,可以很好地实现一个稳定高效的爬虫系统.
在"Go语言爬虫"这个项目中,我们可以看到`marmot-master`这个文件夹,这很可能是一个Git仓库的克隆,包含了大神编写的Go语言爬虫代码。`marmot`可能是指该项目的名称,通常开发者会为自己的项目起一个形象且易于记忆...
本主题聚焦于“golang语言爬虫并发版爬虫源码”,这是一份由Google资深工程师深入解析的教程,旨在帮助开发者理解如何利用Go语言的并发特性构建高效的网络爬虫。 Go语言的核心特性之一就是其强大的并发模型,它采用...
3. **Go语言爬虫实现** - **初始化**:创建URL管理器,通常以种子URL开始。 - **爬虫主循环**:使用goroutine启动下载器,获取网页内容,然后在解析器中提取新的URL并添加到URL管理器。 - **并发控制**:Go语言的...
golang爬虫源码,支持图片列表以及单页面图片爬取,对于初学者有参考意义。该版本支持采集列表规则,页码{{n}}为变量 如:《https://www.58pic.com/collect/fav-{{n}}.html》 其中n为页码,起始页码一般默认为1 ####...
爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的...
在本节中,我们将深入探讨如何使用Go语言编写网络爬虫,这主要针对已经具备Go编程基础的开发者。Go语言,又称Golang,是Google推出的一种静态类型、编译型的编程语言,以其高效的性能、简洁的语法和强大的并发能力在...
在IT行业中,Go语言(Golang)因其高效、并发能力强以及强大的标准库而被广泛用于构建网络服务,尤其是爬虫程序。"golang多线程爬虫"项目就是利用Go语言来实现的一个能够同时处理多个任务的网络爬虫,旨在提高数据...
go语言链接爬虫 go语言链接爬虫 go语言链接爬虫 go语言链接爬虫 go语言链接爬虫
【Go-百度云爬虫】是一种使用Go语言开发的网络爬虫程序,专门针对百度云进行数据抓取。在IT领域,爬虫是自动化获取网页信息的重要工具,它能够高效地遍历网络并提取所需数据。Go语言由于其并发性能优秀、语法简洁...
在本文中,我们将深入探讨如何使用Go语言(Golang)原生库来实现一个简单的网络爬虫。Go语言因其高效、简洁的语法和强大的并发能力,成为开发爬虫的热门选择。我们将通过一个具体的代码实例来阐述这个过程。 首先,...
Go语言,也被称为Golang,是由Google开发的一种静态类型的、编译型的、并发型且具有垃圾回收功能的编程语言。它设计简洁,易于学习,尤其适合处理并发任务,这使得Go成为构建高效网络爬虫的理想选择。 **轻量级爬虫...
在本课程中,我们将深入探讨如何使用Go语言编写网络爬虫。Go语言,又称为Golang,是由Google开发的一种静态类型的、编译型的、并发型的语言,因其...在实践中,不断学习和优化,将使我们成为更优秀的Go语言爬虫开发者。
标题中的“ws_Go_websocket_golang_gows爬虫”表明这是一个使用Go语言和gows库创建的WebSocket服务,并且与网络爬虫有关。然而,通常WebSocket主要用于提供实时数据流,而非网络爬虫,因此这里可能是指利用WebSocket...
非常难得的关于Golang开发的高级实战课程,之前已经发布了非常多的Go语言基础学习教程,本次的课程是关于实战应用篇的技术教学。课程内容分为两个大的部分,第一部分就是非常重要的第一次关于GO语言的爬虫开发实战...
总结起来,这个项目涵盖了Go语言的基本语法、网络请求、HTML解析、并发编程等多个方面,是学习和实践Go语言爬虫开发的一个良好起点。通过这个项目,开发者可以深入了解Go语言在网络爬虫领域的应用,同时提升对HTML...
"golang爬虫库"是指使用Go语言编写的用于网页抓取和数据提取的工具集合。这些库通常包含了处理HTTP请求、解析HTML文档、管理cookies和session、模拟登录、反反爬虫策略等功能,帮助开发者快速搭建高效稳定的网络爬虫...
Go语言编写单机版,并发版,分布式版网络爬虫
此项目是微信公众号批量自动化爬虫的核心实现, 面向开发者开源, 可以当做go语言包引入到自己项目中, 完整产品必须二次开发实现,QQ交流群: 563954381 微信的防作弊一直在不断更新完善,过于频繁的抓取可能导致微信...
在当前的IT行业中,Go语言(Golang)作为一门由Google设计的语言,因其简洁的语法、高效的性能以及在并发处理上的出色能力,逐渐受到了开发者们的广泛关注。本篇文章将重点探讨Go语言在Web爬虫领域的应用及其市场...