当前任务:抓取页面,然后删除回车,tab和空格,然后打印出来。
最初是在raspberry上做的测试。使用新浪作为测试网站。
python部分文件名 gradAndDel.py
#!/bin/env python
# -*- coding:utf-8 -*-
# -------------------------------
# Date: 2016-01-21
# Author: simonzhang
# Web: www.simonzhang.net
# Email: simon-zzm@163.com
# -------------------------------
import urllib
url = "http://www.sina.com.cn/"
data = rullib.urlopen(url).read()
data = data.replace('\n', '')
data = data.replace('\t', '')
data = data.replace(' ', '')
print data
使用时间如下
real 0m2.878s
user 0m1.910s
sys 0m0.240s
golang文件名gradAndDel.go
package main
import (
"fmt"
"io/ioutil"
"net/http"
"strings"
)
func main() {
resp, err := http.Get("http://www.sina.com.cn")
if err != nil {
fmt.Println("http get error.")
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("http read error")
}
src := string(body)
src = strings.Replace(src, "\n","",-1)
src = strings.Replace(src, "\t","",-1)
src = strings.Replace(src, " ","",-1)
fmt.Println(strings.TrimSpace(src))
}
使用时间如下:
real 0m0.718s
user 0m0.290s
sys 0m0.090s
使用golang比python快差不多4倍(使用requests模块抓取显示中文乱码,暂时没有找原因)。
golang1.5后可以将go语言编译为动态链接库。
这样使用python处理业务逻辑,然后调用golang的动态链接库加速执行速度。
但是在raspberry pi上调用的时候报段错误。没有细查,直接放到64位Linux服务器上测试。
要产生动态的链接库的golang代码gradAndDelso.go
/*
# Date: 2016-01-21
# Author: simonzhang
# Web: www.simonzhang.net
# Email: simon-zzm@163.com
*/
package main
import ("C"
"fmt"
"net/http"
"io/ioutil"
"strings"
)
//export Deltr
func Deltr(webdata *C.char) *C.char {
var src string
url := C.GoString(webdata)
src = string(grad(url))
src = strings.Replace(src, "\n","",-1)
src = strings.Replace(src, "\t","",-1)
src = strings.Replace(src, " ","",-1)
data := C.CString(src)
return data
}
//export grad
func grad(url string) string{
resp,err := http.Get(url)
if err != nil {
fmt.Println("http get error.")
}
defer resp.Body.Close()
body,_ := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("http eee error.")
}
goback := string(body)
return goback
}
func main() {}
编译命令
go build -buildmode=c-shared -o gradAndDelso.so gradAndDelso.go
编译完成会产生两个文件,一个so和一个h文件。
使用python调用golang动态链接库部分,代码文件userGoSo.py
#!/bin/env python
# -*- coding:utf-8 -*-
# -------------------------------
# Date: 2016-01-21
# Author: simonzhang
# Web: www.simonzhang.net
# Email: simon-zzm@163.com
# -------------------------------
import ctypes
lib = ctypes.CDLL("./gradAndDelso.so")
url = "http://www.sina.com.cn"
re = lib.Deltr
re.argtypes = [ctypes.c_char_p]
re.restype = ctypes.c_char_p
print re(url)
使用时间
real 0m0.893s
user 0m0.068s
sys 0m0.024s
在64位的服务器上python、golang和python调用golang的动态链接库速度基本上一样没有区别。
如果是处理复杂的运算golang应该比python快很多,实际项目中可以试试。
golang开发的代码量比python还是大不少,编译后的文件有6M,动态链接库8M,个人感觉这部分太大了。
本文源码打包pythonUserGolangLib