首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
beego
Coding
V2EX  ›  Go

基于 Golang 的 HTTP 客户端,爬虫工具 direwolf

  •  1
     
  •   wnanbei · 10 天前 · 1819 次点击

    写了一个基于 Golang 的 HTTP 客户端,可以做为爬虫工具。因为用 Golang 发请求的时候发现有些设置很麻烦,所以参考 Python 的 Requests,写了这个工具。

    地址: https://wnanbei.github.io/direwolf/

    网站中有完整的中文文档,后续会继续完善和添加新的功能。有兴趣的朋友欢迎在 Gayhub 点个 star,如果有 BUG、问题或者建议,也可以在 Gayhub 的 Issues 页面与我讨论。

    特性:

    • 简单方便的 API 接口
    • 非常方便的设置 Headers,Cookies,URL 参数,Post 表单 等请求选项
    • 可以设置到单个请求的超时、代理、重定向控制
    • Cookie 的自动管理与存储
    • 内置连接池,复用 TCP 连接
    • 支持用正则或 CSS 选择器提取响应数据
    • 响应编码控制

    以下是部分简单用法的展示:

    你可以像下方这样非常简单的发起一个请求:

    import (
        "fmt"
    
        dw "github.com/wnanbei/direwolf"
    )
    
    func main() {
        resp, err := dw.Get("http://httpbin.org/get")
        if err != nil {
            return
        }
        fmt.Println(resp.Text())
    }
    

    输出:

    {
      "args": {},
      "headers": {
        "Accept-Encoding": "gzip",
        "Host": "httpbin.org",
        "User-Agent": "direwolf - winter is coming"
      },
      "origin": "171.217.52.188, 171.217.52.188",
      "url": "https://httpbin.org/get"
    }
    

    除此之外,direwolf 可以很方便的给一个请求添加参数,例如 Headers、Cookies、Params。

    import (
        "fmt"
    
        dw "github.com/wnanbei/direwolf"
    )
    
    func main() {
        headers := dw.NewHeaders(
            "User-Agent", "direwolf",
        )
        params := dw.NewParams(
            "name", "wnanbei",
            "age", "18",
        )
        cookies := dw.NewCookies(
            "sign", "kzhxciuvyqwekhiuxcyvnkjdhiue",
        )
        resp, err := dw.Get("https://httpbin.org/get", headers, params, cookies)
        if err != nil {
            return
        }
        fmt.Println(resp.Text())
    }
    

    输出:

    {
        "args": {
            "age": "18",
            "name": "wnanbei"
        },
        "headers": {
            "Accept-Encoding": "gzip",
            "Cookie": "sign=kzhxciuvyqwekhiuxcyvnkjdhiue",
            "Host": "httpbin.org",
            "User-Agent": "direwolf"
        },
        "origin": "1.1.1.1, 1.1.1.1",
        "url": "https://httpbin.org/get?age=18&name=wnanbei"
    }
    
    23 回复  |  直到 2019-12-04 00:24:01 +08:00
        1
    meteor957   10 天前
    感觉 go 的轮子还挺多....
        2
    wnanbei   10 天前
    @meteor957 觉得它好用,愿意造轮子的就多了
        4
    wnanbei   10 天前
    @Wenco 就是觉得这个东西很...我才自己写的
        5
    realpg   10 天前
    V 站 天天又是版权又是 TOS 的

    为啥搞起来违法的爬虫一个比一个精神
        6
    wnanbei   9 天前
    @realpg 朋友,先去看看爬虫的定义,然后再去看看法律,再回来说什么是违法的
        7
    realpg   9 天前
    @wnanbei #6
    我就告诉你一件事
    你写的东西当然不违法
    但是实际用起来 99.99999%都是违反人家 TOS 的
        8
    wnanbei   9 天前
    @realpg 夸张了,爬虫本质上只是网络请求,能做的事情很多,不能因为其被一部分人用于违法的,就把爬虫整个定义为违法的。
        9
    yaoye555   9 天前
    算了,兄 die,在 v 站里 爬虫 == 违法 == 坐牢. 我就纳闷为啥大厂都在明目张胆的招
        10
    u823tg   9 天前
    加油,保持更新。
        11
    wnanbei   9 天前
    @yaoye555 算了,也不辨这些,跟我也没关系。本来只是提一句可以用来写爬虫的。
    我写的是 HTTP 客户端,用来发请求的,跟 python 的 requests 差不多,爱拿来干啥干啥。
        12
    wnanbei   9 天前
    @u823tg 谢谢,会保持更新的
        13
    faceair   9 天前
        14
    wnanbei   9 天前
    @faceair 参考的对象应该都是 python 的 requests
        15
    wsseo   9 天前
    这么多 http client,改选哪一个?
        16
    ershisi   9 天前
    @yaoye555 你可以爬可以自己偷偷摸摸用,但是你不能分享不能用这个数据去卖钱。就这么简单。。。
        17
    yaoye555   9 天前
    @ershisi 我只是好奇猪场招爬虫是干什么的,坐标广州
        18
    wnanbei   9 天前
    @wsseo 你问我的话,那我肯定说选 direwolf 呀,哈哈哈
        19
    wnanbei   9 天前
    @yaoye555 其实蛮多地方都会零零碎碎的需要爬虫的吧
        20
    locoz   9 天前
    @realpg #7 任何东西都要讲量的,与使劲调开放平台的 API 一样可以达到 DDOS 的效果同理。
    @yaoye555 #9 大厂招爬虫是因为需要,数据分析相关的业务只要涉及外部公开数据就会需要爬虫,毕竟别人的数据可不会随便拿出来卖。
        21
    locoz   9 天前
    我感觉我在 V2 上看到好几个仿 Python 上 requests 库的 Golang 库了
        22
    wnanbei   9 天前
    @locoz 可能都是觉得别人写的不够好,就自己写。实际上自己写出来的也没有好到哪里去,哈哈哈。
    还有个原因估计是没有长期稳定有效的更新。
        23
    reus   8 天前
    @realpg 那百度违法吗?谷歌违法吗?
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4413 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 21ms · UTC 06:28 · PVG 14:28 · LAX 22:28 · JFK 01:28
    ♥ Do have faith in what you're doing.