go语言爬虫比python高_『Go 语言实现简易爬虫:市值前100数字货币交易信息』

大家好,我是谢伟,一名程序员。之前接触的语言是Python, 编程领域学会的第一个技能是『爬虫』,凭借着爬虫技术先后在两个创业公司从事的是『网络爬虫』这份活。

研究生毕业后,基于各方面的考虑,选择的是现在的这份工作。主要的是从事『云计算』方面的工作,再细化点,主要从事云计算中的 PaaS 部署相关的工作。

目前正在着手的任务是开发一款命令行工具。支持 PaaS 部署相关的各种命令,且开发语言是 go。

我熟悉的是 Python ,借着之前的编程基础,顺利的转到了 go 语言。很自觉的会比较两款语言的相似和不同之处。同时我越来越理解到:『编程语言只是工具』这句话的含义。

编程语言只是工具

编程最重要的是逻辑,不管是什么领域的开发,逻辑才是最重要的。所以『架构师』这一职业,对逻辑的要求就很高,他需要技术选型、方案设计、方案评估等一系列技能。

编程只是实现或者验证方案是否合适。

逻辑很重要。

示例很重要

这是我从 Python 转而学习 go 语言中总结出来的经验。为了了解各种各样的 go 语言的特性,我有一个工程专门用来进行 go 编程语言示例的学习。即:想要验证一个库或者函数的时候,达到你需要的效果,最好的方法是进行最小示例的验证。

比如:之前开发命令行工具需要支持查询命令表格显示这一功能。就不断的使用示例的学习方法快速上手,快速开发。

快速上手

企业需要的职员是来干活的,需要产出价值,完成任务的。并没有过多的时间让你学习。需要的是快速上手的能力。前期可以有短暂的输入时间。之后需要边输入边产出。快速上手,实现价值交付。

不断的修改

编程不可能一步到位,除非你是传说中的编程天才。代码需要不断的修改,修改的同时对编程语言各种熟悉,同时需要不断的完善代码,能复用的就复用。函数应该是编程中最常见的了,函数不能编写过长。凡是稍微有点处理动作的都应该独立出一个函数进行复用。主函数的处理动作应该是越简单明了越好。不管是以后重构还是增加功能都能很好的实现。

学习各种编程思想

随着系统的越来越复杂,一定需要学习软件行业先进的编程思想,解决复杂的问题,比如 DDD (领域驱动开发), TDD(测试驱动开发)..., 这是我下一个的研究点...

总结很重要

内部是会有各种各样的会议:计划会、总结会、迭代会、复盘会...,等等,所以导致一天其实真正的开发时间并不是很多,其中还会被各种各样的干扰而导致中断,最终的编程效率其实不是很高,自身除了需要进行合理的时间管理之外,我觉得总结很重要,这些会一般是针对团队的,你需要和自己真正的扯上关系才能不断的成长,比如:迭代总结会,通常是分析团队的任务的完成率,做的好的地方和不好的地方,针对你个人你也应该不断的总结自己好的地方和不好的地方,不然,时间过的很快,嗖的一下几年过去了,得不到应有的成长。

言归正传:下面使用 go 语言实现一个简单的爬虫。已经有了 python 爬虫技能,为什么需要进行 go 爬虫的实现版?为了更加的熟悉 go 的语言特性。

我们已经知道:一个简易的标准爬虫的步骤是

HTTP 获取网页内容

进行网页内容解析

对解析的内容进行处理

获取网页内容:

使用 HTTP 不同动作获取网页内容

网页内容解析:

正则表达式或者各种解析工具

解析的内容的处理:

文件处理、数据库处理等

最近数字货币很火,当然风险也很大,这里我们不谈数字货币。我们的目标是爬虫市值前100 的数字货币的相关信息。

抓取内容:0、排名 1、名称 2、流通市值 3、价格 4、流通数量 5、成交额 6、涨幅

效果:输出市值前 100 的数字货币的上述7个字段的信息

定义结构体

表示某个数字货币的信息。

type CoinInfo struct {

Rank string `json:"rank"`

Name string `json:"name"`

CurrentCount string `json:"current_count"`

CurrentPrice string `json:"current_price"`

CurrentMark string `json:"current_mark"`

Count string `json:"count"`

Change string `json:"change"`

}

获取网页内容

net/http

func (h *HttpClientImpl) Get(url string) ([]byte, error) {

client := &http.Client{}

req, err := httpclient.NewRequest("GET", url, nil)

if err != nil {

return nil, err

}

resp, err := client.Do(req)

if err != nil {

return nil, err

}

defer resp.Body.Close()

respBody, err := ioutil.ReadAll(resp.Body)

if err != nil {

return nil, err

}

if resp.StatusCode < 200 || resp.StatusCode >= 300 {

err = errors.New("GET: http client.Do[" + url + "] response error, status code: " +

string(resp.StatusCode) + ", response body: " + string(respBody))

//log.Error("infra", err)

return respBody, err

}

return respBody, nil

}

goquery : 解析网页的库

第三方库,需要自己安装

doc, err := goquery.NewDocument("https://www.feixiaohao.com/")

解析网页内容

以网页源代码中的一个数字货币为例:

1

BTC-比特币BTC-比特币

¥8,443亿 ¥50,0811,686万 ¥4,426,892万

-9.65%

8782,8484,8375,8298,7750,7356,6876,6088,6467,7053,7657,7483,8271,8106,7774,8171,8589,8321,8305,8002,8319,8493,8631,8980,8677,8496,8613,8080

则:各字段解析如下:

doc.Find("table tbody tr").Each(func(i int, selector *goquery.Selection) {

var data CoinInfo

Rank := selector.Find("td").Eq(0).Text()

CoinName := strings.TrimSpace(selector.Find("td").Eq(1).Text())

CurrentCount := selector.Find("td").Eq(2).Text()

CurrentPrice := selector.Find("td").Eq(3).Text()

CurrentMark := selector.Find("td").Eq(4).Text()

Count := selector.Find("td").Eq(5).Text()

Change := strings.TrimSpace(selector.Find("td").Eq(6).Text())

不懂的可以看看goquery 函数方法,结合网页源代码一起看。

json 格式输出

Data, _ := json.MarshalIndent(allData, "", " ")

fmt.Println(string(Data))

全部代码:注意核心代码很少

type CoinInfo struct {

Rank string `json:"rank"`

Name string `json:"name"`

CurrentCount string `json:"current_count"`

CurrentPrice string `json:"current_price"`

CurrentMark string `json:"current_mark"`

Count string `json:"count"`

Change string `json:"change"`

}

func queryExampleTwo() {

doc, err := goquery.NewDocument("https://www.feixiaohao.com/")

if err != nil {

log.Fatal(err)

}

var allData []CoinInfo

doc.Find("table tbody tr").Each(func(i int, selector *goquery.Selection) {

var data CoinInfo

Rank := selector.Find("td").Eq(0).Text()

CoinName := strings.TrimSpace(selector.Find("td").Eq(1).Text())

CurrentCount := selector.Find("td").Eq(2).Text()

CurrentPrice := selector.Find("td").Eq(3).Text()

CurrentMark := selector.Find("td").Eq(4).Text()

Count := selector.Find("td").Eq(5).Text()

Change := strings.TrimSpace(selector.Find("td").Eq(6).Text())

data = CoinInfo{

Rank: Rank,

Name: CoinName,

CurrentCount: CurrentCount,

CurrentPrice: CurrentPrice,

CurrentMark: CurrentMark,

Count: Count,

Change: Change,

}

allData = append(allData, data)

})

Data, _ := json.MarshalIndent(allData, "", " ")

fmt.Println(string(Data))

}

结果:

[

{

"rank": "1",

"name": "BTC-比特币",

"current_count": "¥8,444亿 ",

"current_price": "¥50,091",

"current_mark": "1,686万",

"count": "¥4,413,172万",

"change": "-9.84%"

},

{

"rank": "2",

"name": "ETH-以太坊",

"current_count": "¥4,902亿 ",

"current_price": "¥5,025",

"current_mark": "9,755万",

"count": "¥1,749,536万",

"change": "-9.68%"

},

{

"rank": "3",

"name": "XRP-瑞波币",

"current_count": "¥2,335亿 ",

"current_price": "¥5.98",

"current_mark": "3,902,901万*",

"count": "¥1,765,933万",

"change": "-15.33%"

},

...

]

上文就是一个简易的爬虫示例,主要使用的是goquery 这个解析网页的第三方库的使用,更多的用法和其他的第三方库差不多,甚至你能看出各种编程语言的相通之处。

除此之外,希望你能更加理解:编程语言只是工具。这句话的含义。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 消费类股票交易数据分析项目旨在通过对消费类股票交易数据的分析,挖掘出潜在的投资机会,提投资收益。该项目的设计思路是基于Python编程语言,采用数据挖掘、机器学习等先进算法,结合大数据技术,从市场模式、行业趋势、公司绩效等多个角度出发,实现对消费类股票交易数据的深度挖掘和分析。 在具体实现上,首先需要收集、整合并清洗数据,这一步的数据来源包括股票市场的行情数据、上市公司的财务数据、市场研究机构的报告、社交媒体和新闻媒体等。然后根据需求,将数据分类和预处理,包括数据过滤、去噪、缺失值填充和数据变换等。 接着,根据目标设置和数据特征,使用不同的机器学习算法进行模型训练和预测,例如决策树、随机森林等。在算法选择和调优过程中,需要根据数据架构、特征分布、目标函数等多方面因素进行综合评估和比较。而且,在算法模型建立后,也需要进行模型评估和优化,避免模型过拟合或欠拟合。 最后,根据结果输出和可视化要求,将分析结果利用web界面、数据报表和图形化展示等形式展现出来,方便投资人员对市场趋势和股票表现进行综合判断和决策。 总之,消费类股票交易数据分析项目是一项复杂而富有挑战的工程,需要运用各种技术手段和策略,全面考虑市场环境和交易特征,为投资者提供更优质的决策支持。 ### 回答2: 消费类股票交易数据分析项目的设计与实现需要综合运用Python编程语言、数据分析工具和相关金融知识进行实现。 首先,需要收集和整合消费类股票的交易数据,可以通过使用数据API或者网络爬虫等方式进行获取。然后,需要对数据进行清洗和预处理,过滤掉异常数据以及统一时间戳等格式。 接着,需要对清洗后的数据进行数据分析和可视化的处理。可以使用Python的数据分析库例如Pandas、Numpy和Matplotlib等进行数据挖掘和分析。通过探索性数据分析(EDA)、时间序列分析、回归分析等等,可以得到消费类股票的涨跌情况、成交量、收盘价等数据变化趋势的信息。然后,可以使用可视化工具如Seaborn和Plotly等对数据进行图表展示,从而方便更直观地理解数据变化规律,并基于数据趋势做出投资决策的指导。 同时,也可以结合消费类股票的基本面分析,如盈利质量、营收增长、市值以及资产负债表等相关财务数据。以上分析和可视化将为基金管理人员、投资者等相关人士提供决策和预测依据。 最后,值得注意的是,消费类股票是波动较大的股票之一,因此需要采用适当的风险控制,例如资金管理、减少过于频繁的交易等等,在实践过程中正确处理风险与收益之间的平衡。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值