基于 Golang 的 HTTP 客户端,爬虫工具 direwolf - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
wnanbei
V2EX    Go 编程语言

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

  •  1
     
  •   wnanbei 2019 年 12 月 2 日 5114 次点击
    这是一个创建于 2322 天前的主题,其中的信息可能已经有所发展或是发生改变。

    写了一个基于 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
    meteor957
        1
    meteor957  
       2019 年 12 月 2 日
    感觉 go 的轮子还挺多....
    wnanbei
        2
    wnanbei  
    OP
       2019 年 12 月 2 日
    @meteor957 觉得它好用,愿意造轮子的就多了
    Wenco
        3
    Wenco  
       2019 年 12 月 2 日
    wnanbei
        4
    wnanbei  
    OP
       2019 年 12 月 2 日
    @Wenco 就是觉得这个东西很...我才自己写的
    realpg
        5
    realpg  
    PRO
       2019 年 12 月 2 日
    V 站 天天又是版权又是 TOS 的

    为啥搞起来违法的爬虫一个比一个精神
    wnanbei
        6
    wnanbei  
    OP
       2019 年 12 月 2 日
    @realpg 朋友,先去看看爬虫的定义,然后再去看看法律,再回来说什么是违法的
    realpg
        7
    realpg  
    PRO
       2019 年 12 月 2 日
    @wnanbei #6
    我就告诉你一件事
    你写的东西当然不违法
    但是实际用起来 99.99999%都是违反人家 TOS 的
    wnanbei
        8
    wnanbei  
    OP
       2019 年 12 月 2 日
    @realpg 夸张了,爬虫本质上只是网络请求,能做的事情很多,不能因为其被一部分人用于违法的,就把爬虫整个定义为违法的。
    yaoye555
        9
    yaoye555  
       2019 年 12 月 2 日
    算了,兄 die,在 v 站里 爬虫 == 违法 == 坐牢. 我就纳闷为啥大厂都在明目张胆的招
    u823tg
        10
    u823tg  
       2019 年 12 月 2 日
    加油,保持更新。
    wnanbei
        11
    wnanbei  
    OP
       2019 年 12 月 2 日
    @yaoye555 算了,也不辨这些,跟我也没关系。本来只是提一句可以用来写爬虫的。
    我写的是 HTTP 客户端,用来发请求的,跟 python 的 requests 差不多,爱拿来干啥干啥。
    wnanbei
        12
    wnanbei  
    OP
       2019 年 12 月 2 日
    @u823tg 谢谢,会保持更新的
    faceair
        13
    faceair  
       2019 年 12 月 2 日
    wnanbei
        14
    wnanbei  
    OP
       2019 年 12 月 2 日
    @faceair 参考的对象应该都是 python 的 requests
    wsseo
        15
    wsseo  
       2019 年 12 月 2 日
    这么多 http client,改选哪一个?
    ershisi
        16
    ershisi  
       2019 年 12 月 2 日
    @yaoye555 你可以爬可以自己偷偷摸摸用,但是你不能分享不能用这个数据去卖钱。就这么简单。。。
    yaoye555
        17
    yaoye555  
       2019 年 12 月 2 日
    @ershisi 我只是好奇猪场招爬虫是干什么的,坐标广州
    wnanbei
        18
    wnanbei  
    OP
       2019 年 12 月 2 日
    @wsseo 你问我的话,那我肯定说选 direwolf 呀,哈哈哈
    wnanbei
        19
    wnanbei  
    OP
       2019 年 12 月 3 日
    @yaoye555 其实蛮多地方都会零零碎碎的需要爬虫的吧
    locoz
        20
    locoz  
       2019 年 12 月 3 日
    @realpg #7 任何东西都要讲量的,与使劲调开放平台的 API 一样可以达到 DDOS 的效果同理。
    @yaoye555 #9 大厂招爬虫是因为需要,数据分析相关的业务只要涉及外部公开数据就会需要爬虫,毕竟别人的数据可不会随便拿出来卖。
    locoz
        21
    locoz  
       2019 年 12 月 3 日
    我感觉我在 V2 上看到好几个仿 Python 上 requests 库的 Golang 库了
    wnanbei
        22
    wnanbei  
    OP
       2019 年 12 月 3 日
    @locoz 可能都是觉得别人写的不够好,就自己写。实际上自己写出来的也没有好到哪里去,哈哈哈。
    还有个原因估计是没有长期稳定有效的更新。
    reus
        23
    reus  
       2019 年 12 月 4 日
    @realpg 那百度违法吗?谷歌违法吗?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1228 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 17:34 PVG 01:34 LAX 10:34 JFK 13:34
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86