前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用隧道转发爬虫代理加强版错误解析

使用隧道转发爬虫代理加强版错误解析

原创
作者头像
用户6172015
修改2021-01-20 18:09:50
8670
修改2021-01-20 18:09:50
举报
文章被收录于专栏:网络爬虫网络爬虫

在互联网上进行自动数据采集已是互联网从业者的常规操作,爬虫程序想要长期稳定地进行数据采集,都会使用到爬虫代理来避免目标网站的IP访问限制。在数据采集过程中难免会遇到各种各样的问题,若想要想要快速分析数据采集过程中的问题,我们该怎么做呢?其实可以通过HTTP返回的各种状态码进行判断。一般来说,在使用代理的过程中会出现以下几种错误状态码:

一、出现HTTP的407错误

几种情况下会出现http的407、408错误:

1. 全部是http的407错误,是代理认证信息不对。

1. 少量http的407错误,大量http的200请求成功,有些语言库第一次请求不会传递认证信息,自动发起第二次请求并将认证信息传递,属正常情况。

1. 少量http的200请求成功,少量http的407错误,大量http的429错误,有可能是每秒请求数大量超出代理限定,代理直接返回相关错误。

二、429 Too Many Requests

您的请求过快,请降低请求速率

注意:如果遇到过多429,可以考虑减少线程数量(并发数量),或加上时间间隔(建议 >300ms)。请求超过代理限制,严格按照所开代理的请求数,按照300毫秒为单位进行管理。如果限制之后,既然大量429,需要优化爬虫策略,应该是目标网站返回的错误提示。

三、http状态码403 503 或504

原因:少量不影响,大量403 503或504需要优化爬虫策略

四、504 Proxy Gateway TimeoutLink

代理正在切换IP,请稍后(30秒)再试

目标网站不可达

注意:如果出现少量504属于正常情况。如大量出现,建议在不使用代理的情况下检查目标网站是否可以访问。 可能由目标网站的防护措施导致

代码语言:javascript
复制
// 要访问的目标页面
string targetUrl = "http://httpbin.org/ip";


// 代理服务器(产品官网 www.16yun.cn)
string proxyHost = "http://t.16yun.cn";
string proxyPort = "31111";

// 代理验证信息
string proxyUser = "username";
string proxyPass = "password";

// 设置代理服务器
WebProxy proxy = new WebProxy(string.Format("{0}:{1}", proxyHost, proxyPort), true);


ServicePointManager.Expect100Continue = false;

var request = WebRequest.Create(targetUrl) as HttpWebRequest;

request.AllowAutoRedirect = true;
request.KeepAlive = true;
request.Method    = "GET";
request.Proxy     = proxy;

//request.Proxy.Credentials = CredentialCache.DefaultCredentials;

request.Proxy.Credentials = new System.Net.NetworkCredential(proxyUser, proxyPass);

// 设置Proxy Tunnel
// Random ran=new Random();
// int tunnel =ran.Next(1,10000);
// request.Headers.Add("Proxy-Tunnel", String.valueOf(tunnel));


//request.Timeout = 20000;
//request.ServicePoint.ConnectionLimit = 512;
//request.UserAgent = "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36";
//request.Headers.Add("Cache-Control", "max-age=0");
//request.Headers.Add("DNT", "1");


//String encoded = System.Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(proxyUser + ":" + proxyPass));
//request.Headers.Add("Proxy-Authorization", "Basic " + encoded);

using (var response = request.GetResponse() as HttpWebResponse)
using (var sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
{
    string htmlStr = sr.ReadToEnd();
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档