网络爬虫,是一种自动获取网页内容的程序,是搜索引擎的重要组成部分。一般人能访问到的网页,爬虫也都能抓取。爬虫抓取,就是模拟真实用户浏览网页采集数据。爬虫是可以按照一定的规则,自动的采集信息。
正常的用户访问网站浏览时间较长,访问也不会太过于频繁,目标网站服务器会限制爬虫行为,这是就需要降低访问评率或者停止访问或者用http代理去配合爬虫访问
HTTP代理分很多类型,至于选择哪种类型的代理IP最适合爬虫,看个人业务的需求,需求大的业务,对IP池要求大的可以选择一些高质量的隧道转发的爬虫代理加强版。
HTTP代理的作用:
1、通过HTTP代理访问一些被反爬的网站。
2、加快访问目标网站的速度。
3、修改本地外网,隐藏本地IP
如何使用隧道转发代理:
package main import ( "net/url" "net/http" "bytes" "fmt" "io/ioutil" ) // 代理服务器(产品官网 www.16yun.cn) const ProxyServer = "t.16yun.cn:31111" type ProxyAuth struct { Username string Password string } func (p ProxyAuth) ProxyClient() http.Client { var proxyURL *url.URL if p.Username != ""&& p.Password!="" { proxyURL, _ = url.Parse("http://" + p.Username + ":" + p.Password + "@" + ProxyServer) }else{ proxyURL, _ = url.Parse("http://" + ProxyServer) } return http.Client{Transport: &http.Transport{Proxy:http.ProxyURL(proxyURL)}} } func main() { targetURI := "https://httpbin.org/ip" // 初始化 proxy http client client := ProxyAuth{"username", "password"}.ProxyClient() request, _ := http.NewRequest("GET", targetURI, bytes.NewBuffer([] byte(``))) // 设置Proxy-Tunnel // rand.Seed(time.Now().UnixNano()) // tunnel := rand.Intn(10000) // request.Header.Set("Proxy-Tunnel", strconv.Itoa(tunnel) ) response, err := client.Do(request) if err != nil { panic("failed to connect: " + err.Error()) } else { bodyByte, err := ioutil.ReadAll(response.Body) if err != nil { fmt.Println("读取 Body 时出错", err) return } response.Body.Close() body := string(bodyByte) fmt.Println("Response Status:", response.Status) fmt.Println("Response Header:", response.Header) fmt.Println("Response Body:/n", body) } }
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/53477.html