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

2019-12-02 10:25:31 +08:00
 wnanbei

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

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

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

特性:

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

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

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"
}
4595 次点击
所在节点    Go 编程语言
23 条回复
meteor957
2019-12-02 10:34:51 +08:00
感觉 go 的轮子还挺多....
wnanbei
2019-12-02 10:42:48 +08:00
@meteor957 觉得它好用,愿意造轮子的就多了
Wenco
2019-12-02 10:47:20 +08:00
wnanbei
2019-12-02 10:52:01 +08:00
@Wenco 就是觉得这个东西很...我才自己写的
realpg
2019-12-02 14:28:17 +08:00
V 站 天天又是版权又是 TOS 的

为啥搞起来违法的爬虫一个比一个精神
wnanbei
2019-12-02 14:43:04 +08:00
@realpg 朋友,先去看看爬虫的定义,然后再去看看法律,再回来说什么是违法的
realpg
2019-12-02 14:44:53 +08:00
@wnanbei #6
我就告诉你一件事
你写的东西当然不违法
但是实际用起来 99.99999%都是违反人家 TOS 的
wnanbei
2019-12-02 14:56:30 +08:00
@realpg 夸张了,爬虫本质上只是网络请求,能做的事情很多,不能因为其被一部分人用于违法的,就把爬虫整个定义为违法的。
yaoye555
2019-12-02 15:00:34 +08:00
算了,兄 die,在 v 站里 爬虫 == 违法 == 坐牢. 我就纳闷为啥大厂都在明目张胆的招
u823tg
2019-12-02 15:07:20 +08:00
加油,保持更新。
wnanbei
2019-12-02 15:08:02 +08:00
@yaoye555 算了,也不辨这些,跟我也没关系。本来只是提一句可以用来写爬虫的。
我写的是 HTTP 客户端,用来发请求的,跟 python 的 requests 差不多,爱拿来干啥干啥。
wnanbei
2019-12-02 15:08:38 +08:00
@u823tg 谢谢,会保持更新的
faceair
2019-12-02 15:32:18 +08:00
wnanbei
2019-12-02 17:20:17 +08:00
@faceair 参考的对象应该都是 python 的 requests
wsseo
2019-12-02 17:37:46 +08:00
这么多 http client,改选哪一个?
ershisi
2019-12-02 17:42:06 +08:00
@yaoye555 你可以爬可以自己偷偷摸摸用,但是你不能分享不能用这个数据去卖钱。就这么简单。。。
yaoye555
2019-12-02 18:06:50 +08:00
@ershisi 我只是好奇猪场招爬虫是干什么的,坐标广州
wnanbei
2019-12-02 18:44:12 +08:00
@wsseo 你问我的话,那我肯定说选 direwolf 呀,哈哈哈
wnanbei
2019-12-03 09:44:08 +08:00
@yaoye555 其实蛮多地方都会零零碎碎的需要爬虫的吧
locoz
2019-12-03 10:00:52 +08:00
@realpg #7 任何东西都要讲量的,与使劲调开放平台的 API 一样可以达到 DDOS 的效果同理。
@yaoye555 #9 大厂招爬虫是因为需要,数据分析相关的业务只要涉及外部公开数据就会需要爬虫,毕竟别人的数据可不会随便拿出来卖。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/624953

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX