zoukankan      html  css  js  c++  java
  • Golang: 抓取网页内容

    今天写个简单的程序,根据指定的 URL 来抓取相应的网页内容,然后存入本地文件。这个程序会涉及到网络请求和文件操作等知识点,下面是实现代码:

    // fetch.go
    
    package main
    
    import (
        "os"
        "fmt"
        "net/http"
        "io/ioutil"
    )
    
    func main() {
        url := os.Args[1]
    
        // 根据URL获取资源
        res, err := http.Get(url)
    
        if err != nil {
            fmt.Fprintf(os.Stderr, "fetch: %v
    ", err)
            os.Exit(1)
        }
    
        // 读取资源数据 body: []byte
        body, err := ioutil.ReadAll(res.Body)
    
        // 关闭资源流
        res.Body.Close()
    
        if err != nil {
            fmt.Fprintf(os.Stderr, "fetch: reading %s: %v
    ", url, err)
            os.Exit(1)
        }
    
        // 控制台打印内容 以下两种方法等同
        fmt.Printf("%s", body)
        fmt.Printf(string(body))
    
        // 写入文件
        ioutil.WriteFile("site.txt", body, 0644)
    }
    

    上面的代码中,我们引入了 net/http 网络包,然后调用 http.Get(url) 方法获取 URL 对应的资源,之后读取出资源数据,然后在控制台打印,并将内容写入到本地文件中。

    需要注意的是,在读取资源数据完毕后,应该及时将资源流关闭,避免出现内存资源的泄露。

    另外,在处理异常时,我们使用了 fm.Fprintf() 这个方法,它是格式化三大方法之一:

    • Printf: 格式化字符串并输出到 os.Stdout 中。
    • Fprintf: 格式化字符串并输出到指定文件设备中,所以参数比 Printf 多一个文件指针 FILE*。
    • Sprintf: 格式化字符串并输出到指定字符串中,所以参数比 Printf 多一个 char*,那就是目标字符串地址。

    编译后运行程序,并指定一个 URL 参数,这里暂时指定为百度吧,还是希望 Google 近期能够回归:

    $ ./fetch http://www.baidu.com
    

    运行完程序,在当前目录中会生成一个 site.txt 文件。

  • 相关阅读:
    机房管理日记——2014/10/17
    ServletContext加入和访问
    打开系统设置
    阅读本书要瘦《面向对象的葵花宝典》札记-面向对象的基础
    Codeforces 327B-Hungry Sequence(素数筛)
    angularJS socket
    【Nginx】如何应对HTTP组态
    Android ActionBar详解(一):ActionBar概述及其创建
    Android高级图片滚动控件,编写3D版的图片轮播器
    Android自定义View的实现方法,带你一步步深入了解View(四)
  • 原文地址:https://www.cnblogs.com/liuhe688/p/10897712.html
Copyright © 2011-2022 走看看