综合技术交流
直播中

laical

5年用户 52经验值
擅长:可编程逻辑
私信 关注
[问答]

使用爬虫代理错误问题解决方案

在如今的互联网时代,网络爬虫成了许多企业的重要岗位之一。当然在数据采集中会遇到各种问题,例如限制IP,出现访问验证码等。这种时候就需要各种反爬策略和使用HTTP代理去解决问题。在爬虫用在使用代理的时候也会遇到各种问题。
爬虫代理HTTP状态码问题解决方案:代理使用失败
让对方截图看看代理代码,代理信息是否提取配置正确。重点注意必须使用代理域名,不能是代理服务器IP。
要求对方复制demo,然后加上ua随机优化,按照所开代理的请求数,按照300毫秒为单位进行管理,运行程序后统计错误信息和http的状态码。
代理链接失败
原因:对方是否有防火墙,导致无法链接我们服务器;对方开的代理是否过期。
http状态码407
原因:代理认证信息失败,让对方严格按照demo配置代理信息
http状态码429
原因:请求超过代理限制,严格按照所开代理的请求数,按照300毫秒为单位进行管理。如果限制之后,既然大量429,需要优化爬虫策略,应该是目标网站返回的错误提示。
http状态码302
原因:访问的是https网站,会自动跳转一次,正常现象;访问的http网站,网站拒绝服务,大量302需要优化爬虫策略
http状态码403  503 或504
原因:少量不影响,大量403  503或504需要优化爬虫策略
http请求超时
原因:http请求的超时设置为10秒,尤其是对方访问国外网站的时候。
如何正确使用爬虫代理:
可以参考https://www.16yun.cn/help/ss_demo/index.html此链接复制正确的代码dmeo配置相关的代理信息即可使用
        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)            }        }


互联网上的网站都会有反爬机制,网络爬虫用户需要做好相关的反爬策略和使用高效稳定的爬虫代理才能更加有效率的采集相关数据。

更多回帖

发帖
×
20
完善资料,
赚取积分