发 帖  
原厂入驻New
[讨论] Golang爬虫语言接入代理?
2020-9-9 17:41:32  131
分享
golang语言也是爬虫中的一种框架语言。当然很多网络爬虫新手都会面临选择什么语言适合于爬虫。一般很多爬虫用户都会选择python和java框架语言来写爬虫程序从而进行采集数据。其实除了python和java框架语言还有很多语言都适合数据采集。只不过python和JAVA语言框架比较符合大家的选择性。我这里选择的就是golang语言调用自己的爬虫程序。只要了解爬虫原理,不管用什么编程语言,基本上都是可以写出一个爬虫系统的。无论用什么爬虫语言框架,长期使用一个IP去采集数据,肯定会收到限制。这种时候就需要使用爬虫代理去解决问题。
golang爬虫步骤:
1、制定爬虫目标
2、制定一个爬虫接口
3、发出HTTP,获取数据
4、屏蔽无效请求
5、解析数据内容
6、储存数据
7、使用爬虫代理持续采集
以下是golang语言配置爬虫代理代码demo :
  1.         package main

  2.         import (
  3.             "net/url"
  4.             "net/http"
  5.             "bytes"
  6.             "fmt"
  7.             "io/ioutil"
  8.         )

  9.         // 代理服务器(产品官网 www.16yun.cn)
  10.         const ProxyServer = "t.16yun.cn:31111"

  11.         type ProxyAuth struct {
  12.             Username string
  13.             Password string
  14.         }

  15.         func (p ProxyAuth) ProxyClient() http.Client {

  16.             var proxyURL *url.URL
  17.             IF p.Username != ""&& p.Password!="" {
  18.                 proxyURL, _ = url.Parse("http://" + p.Username + ":" + p.Password + "@" + ProxyServer)
  19.             }else{
  20.                 proxyURL, _ = url.Parse("http://" + ProxyServer)
  21.             }
  22.             return http.Client{Transport: &http.Transport{Proxy:http.ProxyURL(proxyURL)}}
  23.         }

  24.         func main()  {


  25.             targetURI := "https://httpbin.org/ip"


  26.             // 初始化 proxy http client
  27.             client := ProxyAuth{"username",  "password"}.ProxyClient()

  28.             request, _ := http.NewRequest("GET", targetURI, bytes.NewBuffer([] byte(``)))

  29.             // 设置Proxy-Tunnel
  30.             // rand.Seed(time.Now().UnixNano())
  31.             // tunnel := rand.Intn(10000)
  32.             // request.Header.Set("Proxy-Tunnel", strconv.Itoa(tunnel) )

  33.             response, err := client.Do(request)

  34.             if err != nil {
  35.                 panic("faiLED to connect: " + err.Error())
  36.             } else {
  37.                 bodyByte, err := ioutil.ReadAll(response.Body)
  38.                 if err != nil {
  39.                     fmt.Println("读取 Body 时出错", err)
  40.                     return
  41.                 }
  42.                 response.Body.Close()

  43.                 body := string(bodyByte)

  44.                 fmt.Println("Response Status:", response.Status)
  45.                 fmt.Println("Response Header:", response.Header)
  46.                 fmt.Println("Response Body:\n", body)
  47.             }
  48.         }
复制代码


0
2020-9-9 17:41:32   评论 分享淘帖

撰写讨论

你正在撰写讨论

如果你是对讨论或其他讨论精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
发讨论
关闭

站长推荐 上一条 /8 下一条

快速回复 返回顶部 返回列表