• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

GO语言的进阶之路-爬虫进阶之路

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

                         GO语言的进阶之路-爬虫进阶之路

                                                  作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

 

  网络爬虫是一种自动获取网页内容的程序,是搜索引擎的重要组成部分。我们今天要介绍的就是一个简单的网络爬虫,可以爬取img,script文件,当然你也可以修改一下你的脚本程序,进行爬去avi,mp4,rmvb等等。将趴取到的内容下载下来,然后打包成一个压缩文件,最终实现的效果就是用户访问一个网站就能将内容download下来。是不是很带劲?那就跟着我的脚本一起探索其中的乐趣吧。

  本来是想把代码贴在这里就OK了,但是为了让一些小白知道这个爬虫的实现原理,我打算把爬虫的函数一个一个进行分解的给大家讲解出来,深入分析一下爬虫,因为我们不能一口吃个大胖子嘛。还有就是我直接把代码贴出来效果就不咋好了,主要是我要写点内容嘛~哈哈,接下来就跟我一起体验一下其中的乐趣吧,如果本篇博客你能全部看懂的话,那么恭喜你,你也可以写一个爬虫了,当然你可以适当修改源代码,进行爬虫你想要的内容。对了,有Golang基础的童鞋可以直接将进度条移动到结尾,直接去撸源代码了,我都做了相应的注释。

  在使用爬虫的时候,我要声明三点:

      1>.你的电脑是可以联网的,换句话说,你在哪台电脑上执行程序,如果可以用那台电脑通过网页访问到数据的话,那么爬虫只要写的没问题,你就可以拿到你想要拿到的数据;

    2>.在你的带宽充足的情况下,你可以开启多个协程帮你爬去你想要的内容,但是要注意开启的个数,不然的话可能会被封掉IP;

    3>.爬虫可以爬去公有资源和私有资源,如果您用VIP登录到爱奇艺,乐视,或是腾讯视频爬去到的资源请不要在用作商业用途,爬虫是一个很好的工具要取之有节用只有度哟。

  好了,话不多数,我们一起开始爬虫进阶之旅吧。

 

一.path与filepath的区别;

 1 /*
 2 #!/usr/bin/env gorun
 3 @author :yinzhengjie
 4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
 5 EMAIL:[email protected]
 6 */
 7 
 8 /*
 9 filepath适合处理操作系统的路径;
10 path适合处理http或者是ftp这种协议带有""分割线的路径;
11 */

  path的官方手册:https://golang.org/pkg/path/

  filepath的官方手册:https://golang.org/pkg/path/filepath/

 1 package main
 2 
 3 import (
 4     "path/filepath"
 5     "fmt"
 6     "path"
 7 )
 8 
 9 func main() {
10     yinzhengjie_blog := "http://www.cnblogs.com/yinzhengjie/p/7201980.html" //这里定义的路径是浏览器上的。
11 
12     //golang_windows_path := "D:\\Golang环境\\Go环境安装\\go\\bin\\go.exe" //这里定义的路径是windows操作系统的。
13 
14     golang_linux_path := "/yinzhengjie/golang/local/go/bin/go"  //这里定义的路径是linux操作系统的。
15 
16     filepath_dir := filepath.Dir(yinzhengjie_blog)  //找到文件存放的绝对路径,我们发现效果是不一样的呢。
17     //filepath_dir := filepath.Dir(golang_windows_path)
18     path_dir := path.Dir(golang_linux_path) //只能得到当前的路径。
19 
20     filepath_name := filepath.Base(yinzhengjie_blog) //拿到文件名称。
21     path_name := path.Base(golang_linux_path)
22 
23     fullname := filepath.Join(filepath_dir,filepath_name)  //拿到完整路径。
24     fullname1 := filepath.Join(path_dir,path_name)
25 
26     fmt.Printf("filepath得到的目录的结果是:\033[31;1m%s\033[0m\n",filepath_dir)
27     fmt.Printf("path得到的目录的结果是:\033[31;1m%s\033[0m\n",path_dir)
28 
29     fmt.Printf("filepath得到的文件名的结果是:\033[31;1m%s\033[0m\n",filepath_name)
30     fmt.Printf("path得到的文件名的结果是:\033[31;1m%s\033[0m\n",path_name)
31 
32     fmt.Printf("filepath得到的完整路径的结果是:\033[31;1m%s\033[0m\n",fullname)
33     fmt.Printf("filepath得到的完整路径的结果是:\033[31;1m%s\033[0m\n",fullname1)
34 }
35 
36 
37 
38 
39 #以上代码输出结果如下:
40 filepath得到的目录的结果是:http:\www.cnblogs.com\yinzhengjie\p
41 path得到的目录的结果是:/yinzhengjie/golang/local/go/bin
42 filepath得到的文件名的结果是:7201980.html
43 path得到的文件名的结果是:go
44 filepath得到的完整路径的结果是:http:\www.cnblogs.com\yinzhengjie\p\7201980.html
45 filepath得到的完整路径的结果是:\yinzhengjie\golang\local\go\bin\go

   对了,关于获取目录还有一个模块(os/exec)也挺有意思的,分享给大家:

 1 /*
 2 #!/usr/bin/env gorun
 3 @author :yinzhengjie
 4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
 5 EMAIL:[email protected]
 6 */
 7 
 8 package main
 9 
10 import (
11     "os/exec"
12     //"os"
13     "fmt"
14     "strings"
15 )
16 
17 func main() {
18     //path,err := exec.LookPath(os.Args[0])
19     path,err := exec.LookPath("D:\\Golang环境\\Golang_Program\\Golang_lesson\\Day9\\6.io读取http请求.go")
20     if err != nil {
21         panic("报错了!")
22     }
23     fmt.Println("文件的绝对路径是:",path)
24 
25     index := strings.LastIndex(path,"\\")
26     path_name := string(path[0:index+1])
27     fmt.Println("该文件所在目录是:",path_name)
28 }
29 
30 
31 
32 #以上代码执行结果如下:
33 文件的绝对路径是: D:\Golang环境\Golang_Program\Golang_lesson\Day9\6.io读取http请求.go
34 该文件所在目录是: D:\Golang环境\Golang_Program\Golang_lesson\Day9\

  上篇关于Golang的博客我们一起分享了关于过滤img标签的src,但是我们获取到的路径可能存在不完整路径,有的是绝对路径有的是相对路径。好了,这个时候我们想要拿到完整的路径,我们就可以用到这个filepath模块了,我们可以对源代码进行修改。源代码请参考:http://www.cnblogs.com/yinzhengjie/p/7201980.html

 1 /*
 2 #!/usr/bin/env gorun
 3 @author :yinzhengjie
 4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/
 5 EMAIL:[email protected]
 6 */
 7 
 8 package main
 9 
10 import (
11     "errors"
12     "fmt"
13     "github.com/PuerkitoBio/goquery"
14     "log"
15     "net/http"
16     "net/url"
17     "os"
18     "strings"
19     "path/filepath"
20 )
21 
22 func fetch(url string) ([]string, error) { //改函数会拿到我们想要的图片的路径。
23     var urls []string //定义一个空切片数组
24     resp, err := http.Get(url)
25     if err != nil {
26         log.Fatal(err)
27     }
28     defer resp.Body.Close()
29     if resp.StatusCode != http.StatusOK {
30         return nil, errors.New(resp.Status) //表示当出现错误是,返回空列表,并将错误状态返回。
31     }
32     doc, err := goquery.NewDocumentFromResponse(resp)
33     if err != nil {
34         log.Fatal(err)
35     }
36     doc.Find("img").Each(func(i int, s *goquery.Selection) {
37         link, ok := s.Attr("src")
38         if ok {
39             urls = append(urls, link) //将过滤出来的图片路径都追加到urls的数组中去,最终返回给用户。
40         } else {
41             fmt.Println("抱歉,没有发现该路径。")
42         }
43 
44     })
45     return urls, nil
46 }
47 
48 func Clean_urls(root_path string, picture_path []string) []string {
49     var Absolute_path []string //定义一个绝对路径数组。
50     url_info, err := url.Parse(root_path)
51     if err != nil {
52         log.Fatal(err)
53     }
54     Scheme := url_info.Scheme //获取到链接的协议
55     //fmt.Println("使用的协议是:",Scheme)
56     Host := url_info.Host //获取链接的主机名
57     for _, souce_path := range picture_path {
58         if strings.HasPrefix(souce_path, "https") { //如果当前当前路径是以“https”开头说明是绝对路径,因此我们给一行空代码,表示不执行任何操作,千万别写:“continue”,空着就好。
59 
60         } else if strings.HasPrefix(souce_path, "//") { //判断当前路径是否以“//”开头(说明包含主机名)
61             souce_path = Scheme + ":" + souce_path //如果是就对其进行拼接操作。以下逻辑相同。
62         } else if strings.HasPrefix(souce_path, "/") { //说明不包含主机名和协议,我们进行拼接即可。
63             souce_path = Scheme + "://" + Host + souce_path
64         } else {
65             souce_path = filepath.Dir(root_path) + souce_path  //文件名称和用户输入的目录相拼接。
66         }
67         Absolute_path = append(Absolute_path, souce_path) //不管是否满足上面的条件,最终都会被追加到该数组中来。
68     }
69     return Absolute_path //最终返回处理后的每个链接的绝对路基。
70 }
71 
72 func main() {
73     root_path := os.Args[1]               //定义一个URl,也就是我们要爬的网站。
74     picture_path, err := fetch(root_path) //“fetch”函数会帮我们拿到picture_path的路径,但是路径可能是相对路径或是绝对路径。不同意。
75     if err != nil {
76         log.Fatal(err)
77     }
78 
79     Absolute_path := Clean_urls(root_path, picture_path) //“Clean_urls”函数会帮我们把picture_path的路径做一个统一,最终都拿到了绝对路径Absolute_path数组。
80 
81     for _, Picture_absolute_path := range Absolute_path {
82         fmt.Println(Picture_absolute_path) //最终我们会得到一个图片的完整路径,我们可以对这个路径进行下载,压缩,加密等等操作。
83     }
84 }

 

二.下载图片;

  既然我们能得到文件的完整路径,那么我们可以对这个路径搞点事情,比如下载这个路径地址,如果是图片就会得到一个图片到本地,如果是个视频,嘿嘿,那就会有视频被下载,这样不用你手动去点,自己就可以把这些事情搞定。代码及注释如下:

  1 /*
  2 #!/usr/bin/env gorun
  3 @author :yinzhengjie
  4 Blog:http://www.cnblogs.com/yinzhengjie/tag/GO%E8%AF%AD%E8%A8%80%E7%9A%84%E8%BF%9B%E9%98%B6%E4%B9%8B%E8%B7%AF/ 
  5 
  6 EMAIL:[email protected]
  7 */
  8 
  9 package main
 10 
 11 import (
 12     "errors"
 13     "fmt"
 14     "github.com/PuerkitoBio/goquery"
 15     "log"
 16     "net/http"
 17     "net/url"
 18     "strings"
 19     "io/ioutil"
 20     "path/filepath"
 21     "os"
 22     "io"
 23 )
 24 
 25 func fetch(url string) ([]string, error) { //改函数会拿到我们想要的图片的路径。
 26     var urls []string //定义一个空切片数组
 27     resp, err := http.Get(url)
 28     if err != nil {
 29         log.Fatal(err)
 30     }
 31     defer resp.Body.Close()
 32     if resp.StatusCode != http.StatusOK {
 33         return nil, errors.New(resp.Status) //表示当出现错误是,返回空列表,并将错误状态返回。
 34     }
 35     doc, err := goquery.NewDocumentFromResponse(resp)
 36     if err != nil {
 37         log.Fatal(err)
 38     }
 39     doc.Find("img").Each(func(i int, s *goquery.Selection) {
 40         link, ok := s.Attr("src")
 41         if ok {
 42             urls = append(urls, link) //将过滤出来的图片路径都追加到urls的数组中去,最终返回给用户。
 43         } else {
 44             fmt.Println("抱歉,没有发现该路径。")
 45         }
 46 
 47     })
 48     return urls, nil
 49 }
 50 
 51 func Clean_urls(root_path string, picture_path []string) []string {
 52     var Absolute_path []string //定义一个绝对路径数组。
 53     url_info, err := url.Parse(root_path)
 54     if err != nil {
 55         log.Fatal(err)
 56     }
 57     Scheme := url_info.Scheme //获取到链接的协议
 58     Host := url_info.Host //获取链接的主机名
 59     for _, souce_path := range picture_path {
 60         if strings.HasPrefix(souce_path, "https") { //如果当前当前路径是以“https”开头说明是绝对路径,因此我们给一行空代码,表示不执行任何操作,千万别写:“continue”,空着就好。
 61 
 62         } else if strings.HasPrefix(souce_path, "//") { //判断当前路径是否以“//”开头(说明包含主机名)
 63             souce_path = Scheme + ":" + souce_path //如果是就对其进行拼接操作。以下逻辑相同。
 64         } else if strings.HasPrefix(souce_path, "/") { //说明不包含主机名和协议,我们进行拼接即可。
 65             souce_path = Scheme + "://" + Host + souce_path
 66         } else {
 67             souce_path = filepath.Dir(root_path) + souce_path  //文件名称和用户输入的目录相拼接。
 68         }
 69         Absolute_path = append(Absolute_path, souce_path) //不管是否满足上面的条件,最终都会被追加到该数组中来。
 70     }
 71     return Absolute_path //最终返回处理后的每个链接的绝对路基。
 72 }
 73 
 74 func downloadImgs(urls []string, dir string) error {
 75     for _,link := range urls{
 76         resp,err := http.Get(link)
 77         if err != nil {
 78             log.Fatal(err)
 79         }
 80         defer resp.Body.Close()  //千万要关闭链接,不然会造成资源泄露(就是为了防止死循环)。
 81         if resp.StatusCode != http.StatusOK{ //如果返回状态出现错误,就抛出错误。也就是你要过滤出来你下载的图片是ok的!
 82             log.Fatal(resp.Status)
 83         }
 84         file_name := filepath.Base(link) //创建一个文件名也就是,这里我们捕捉网站到原文件名称。
 85         full_name := filepath.Join(dir,file_name) //这是将下载到文件存放在我们指定到目录中去。
 86         f,err := os.Create(full_name) //创建我们定义到文件。
 87         if err != nil {
 88             log.Panic("创建文件失败啦!") //创建失败的话,我们就给出自定义的报错。
 89         }
 90         io.Copy(f,resp.Body) //将文件到内容拷贝到我们创建的文件中。
 91         fmt.Printf("已下载文件至:\033[31;1m%s\033[0m\n",full_name)
 92         //defer os.RemoveAll(file_name) //删除文件。
 93     }
 94     return nil
 95 }
 96 
 97 
 98 
 99 func main() {
100     root_path := "http://daily.zhihu.com/"               //定义一个URl,也就是我们要爬的网站。
101     picture_path, err := fetch(root_path) //“fetch”函数会帮我们拿到picture_path的路径,但是路径可能是相对路径或是绝对路径。不同意。
102     if err != nil {
103         log.Fatal(err)
104     }
105 
106     Absolute_path := Clean_urls(root_path, picture_path) //“Clean_urls”函数会帮我们把picture_path的路径做一个统一,最终都拿到了绝对路径Absolute_path数组。
107     tmpdir,err := ioutil.TempDir("","yinzhengjie") //创建一个临时目录,注意第一个参数最好设置为空(如果设置的话指定目录必须为空。),因为系统会随机给你在"yinzhengjie"随机加一串数字。
108     //defer os.RemoveAll(tmpdir) //将临时目录删除掉,但是未了能看到效果我们不要删除,方便我们取验证。
109     fmt.Println(tmpdir)
110     err = downloadImgs(Absolute_path,tmpdir)
111     if err != nil {
112         log.Panic(err)
113     }
114 }

 

以上代码用法展示如下:

 1 '''
 2 [root@yinzhengjie tmp]# go run clean_url.go  //运行脚本
 3 /tmp/yinzhengjie008703569
 4 已下载文件至:/tmp/yinzhengjie008703569/phone_sample.png
 5 已下载文件至:/tmp/yinzhengjie008703569/qr_top2.png
 6 已下载文件至:/tmp/yinzhengjie008703569/v2-c6eafd4657c6b3d3d315a10976fc9327.jpg
 7 已下载文件至:/tmp/yinzhengjie008703569/v2-d4257cc9d1d0ef8a12d13f960c55a216.jpg
 8 已下载文件至:/tmp/yinzhengjie008703569/v2-1df263e7225586d7b96524cde3e03377.jpg
 9 已下载文件至:/tmp/yinzhengjie008703569/v2-1ab013750fc8e99592f1575dd624d349.jpg
10 已下载文件至:/tmp/yinzhengjie008703569/v2-a637e7ed8cc70f682217095d85bb760f.jpg
11 已下载文件至:/tmp/yinzhengjie008703569/v2-dd16e057c7888affa4fe8d2d94eba7aa.jpg
12 已下载文件至:/tmp/yinzhengjie008703569/v2-606c8d97459eea560a982d38ad675635.jpg
13 已下载文件至:/tmp/yinzhengjie008703569/v2-a34fc25ebfc5236148935e7e38e22421.jpg
14 已下载文件至:/tmp/yinzhengjie008703569/v2-3ed913c7731f3fc8931da4a9d652511c.jpg
15 已下载文件至:/tmp/yinzhengjie008703569/v2-58887fb8fdeb00872f9c11ebe41a51ef.jpg
16 已下载文件至:/tmp/yinzhengjie008703569/v2-b0d49b4709dbf4cbc90838ca383edd2e.jpg
17 已下载文件至:/tmp/yinzhengjie008703569/v2-ef679c0ed3f236e8d598a4855af0ffa8.jpg
18 已下载文件至:/tmp/yinzhengjie008703569/v2-ce17057210e31bba97da37c5583a57c4.jpg
19 已下载文件至:/tmp/yinzhengjie008703569/v2-30a6ab7ee9be760d2d12ed354bf18ac5.jpg
20 已下载文件至:/tmp/yinzhengjie008703569/v2-4b74a8fb442ee483498f71f678568c46.jpg
21 已下载文件至:/tmp/yinzhengjie008703569/v2-307267fa9e33c51f3d2acc4d0cae09b0.jpg
22 已下载文件至:/tmp/yinzhengjie008703569/v2-872e11950d98c437bbebc193a0763b91.jpg
23 已下载文件至:/tmp/yinzhengjie008703569/v2-92842c98334327e21bd102ad6971f5f5.jpg
24 已下载文件至:/tmp/yinzhengjie008703569/v2-88e98bc9cc22cd18a355c3e39bb49fb9.jpg
25 已下载文件至:/tmp/yinzhengjie008703569/v2-ae95b0f879c23a8f86e4d0be9ea3cb1e.jpg
26 已下载文件至:/tmp/yinzhengjie008703569/v2-34290a2c50bfe672890efce34e6fb69f.jpg
27 已下载文件至:/tmp/yinzhengjie008703569/v2-1785cb51899750c8b2ac2229ce9a6402.jpg
28 已下载文件至:/tmp/yinzhengjie008703569/v2-4a37c869e5a4a7c31434b8337e20ff4f.jpg
29 已下载文件至:/tmp/yinzhengjie008703569/v2-f93fc24b0ebfe2575369259dedbafd63.jpg
30 已下载文件至:/tmp/yinzhengjie008703569/v2-6bf90abdddd72ecd2a35099c957b22dc.jpg
31 已下载文件至:/tmp/yinzhengjie008703569/v2-7212853bb56d350bd412e75b40dbfad4.jpg
32 已下载文件至:/tmp/yinzhengjie008703569/v2-cb8b432cfa8aaac47f346f6effd33d63.jpg
33 已下载文件至:/tmp/yinzhengjie008703569/v2-99c631a661dc923e1b29d01d7cf4010c.jpg
34 已下载文件至:/tmp/yinzhengjie008703569/v2-56bc12c3fe26e6fa62aa6f874ba3c4a6.jpg
35 已下载文件至:/tmp/yinzhengjie008703569/v2-82515795f5f9bbbfecab04bb8c095043.jpg
36 已下载文件至:/tmp/yinzhengjie008703569/qr_bottom.png
37 [root@yinzhengjie tmp]# ll /tmp/yinzhengjie008703569  //查看是否下载成功。当你可以下载下来可以打开看看,里面的内容我就不给大家分享了,哈哈~
38 total 1692
39 -rw-r--r-- 1 root root 171741 Jul 24 12:10 phone_sample.png
40 -rw-r--r-- 1 root root   2462 Jul 24 12:10 qr_bottom.png
41 -rw-r--r-- 1 root root    829 Jul 24 12:10 qr_top2.png
42 -rw-r--r-- 1 root root  57857 Jul 24 12:10 v2-1785cb51899750c8b2ac2229ce9a6402.jpg
43 -rw-r--r-- 1 root root  57490 Jul 24 12:10 v2-1ab013750fc8e99592f1575dd624d349.jpg
44 -rw-r--r-- 1 root root  45726 Jul 24 12:10 v2-1df263e7225586d7b96524cde3e03377.jpg
45 -rw-r--r-- 1 root root  57550 Jul 24 12:10 v2-307267fa9e33c51f3d2acc4d0cae09b0.jpg
46 -rw-r--r-- 1 root root  50676 Jul 24 12:10 v2-30a6ab7ee9be760d2d12ed354bf18ac5.jpg
47 -rw-r--r-- 1 root root  26011 Jul 24 12:10 v2-34290a2c50bfe672890efce34e6fb69f.jpg
48 -rw-r--r-- 1 root root  19310 Jul 24 12:10 v2-3ed913c7731f3fc8931da4a9d652511c.jpg
49 -rw-r--r-- 1 root root  60436 Jul 24 12:10 v2-4a37c869e5a4a7c31434b8337e20ff4f.jpg
50 -rw-r--r-- 1 root root  33389 Jul 24 12:10 v2-4b74a8fb442ee483498f71f678568c46.jpg
51 -rw-r--r-- 1 root root  57105 Jul 24 12:10 v2-56bc12c3fe26e6fa62aa6f874ba3c4a6.jpg
52 -rw-r--r-- 1 root root  59942 Jul 24 12:10 v2-58887fb8fdeb00872f9c11ebe41a51ef.jpg
53 -rw-r--r-- 1 root root  59402 Jul 24 12:10 v2-606c8d97459eea560a982d38ad675635.jpg
54 -rw-r--r-- 1 root root  57641 Jul 24 12:10 v2-6bf90abdddd72ecd2a35099c957b22dc.jpg
55 -rw-r--r-- 1 root root  26449 Jul 24 12:10 v2-7212853bb56d350bd412e75b40dbfad4.jpg
56 -rw-r--r-- 1 root root  58009 Jul 24 12:10 v2-82515795f5f9bbbfecab04bb8c095043.jpg
57 -rw-r--r-- 1 root root  57380 Jul 24 12:10 v2-872e11950d98c437bbebc193a0763b91.jpg
58 -rw-r--r-- 1 root root  35464 Jul 24 12:10 v2-88e98bc9cc22cd18a355c3e39bb49fb9.jpg
59 -rw-r--r-- 1 root root  57299 Jul 24 12:10 v2-92842c98334327e21bd102ad6971f5f5.jpg
60 -rw-r--r-- 1 root root  37474 Jul 24 12:10 v2-99c631a661dc923e1b29d01d7cf4010c.jpg
61 -rw-r--r-- 1 root root  61607 Jul 24 12:10 v2-a34fc25ebfc5236148935e7e38e22421.jpg
62 -rw-r--r-- 1 root root  59202 Jul 24 12:10 v2-a637e7ed8cc70f682217095d85bb760f.jpg
63 -rw-r--r-- 1 root root  58204 Jul 24 12:10 v2-ae95b0f879c23a8f86e4d0be9ea3cb1e.jpg
64 -rw-r--r-- 1 root root  43556 Jul 24 12:10 v2-b0d49b4709dbf4cbc90838ca383edd2e.jpg
65 -rw-r--r-- 1 root root  25607 Jul 24 12:10 v2-c6eafd4657c6b3d3d315a10976fc9327.jpg
66 -rw-r--r-- 1 root root  55630 Jul 24 12:10 v2-cb8b432cfa8aaac47f346f6effd33d63.jpg
67 -rw-r--r-- 1 root root  31262 Jul 24 12:10 v2-ce17057210e31bba97da37c5583a57c4.jpg
68 -rw-r--r-- 1 root root  59030 Jul 24 12:10 v2-d4257cc9d1d0ef8a12d13f960c55a216.jpg
69 -rw-r--r-- 1 root root  58919 Jul 24 12:10 v2-dd16e057c7888affa4fe8d2d94eba7aa.jpg
70 -rw-r--r-- 1 root root  56729 Jul 24 12:10 v2-ef679c0ed3f236e8d598a4855af0ffa8.jpg
71 -rw-r--r-- 1 root root  54278 Jul 24 12:10 v2-f93fc24b0ebfe2575369259dedbafd63.jpg
72 [root@yinzhengjie tmp]# 
73 '''

 

三.生产tar包;

  完成第二部下载之后,你也得到很多文件,一动起来不太方便,要是能生产一个tar.gz的文件就好了,于是我们又可以增


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
windows配置安装go开发环境发布时间:2022-07-10
下一篇:
12.Go语言-网络编程发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap