前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一份解决爬虫错误问题指南

一份解决爬虫错误问题指南

原创
作者头像
小白学大数据
发布2022-12-14 15:38:45
9790
发布2022-12-14 15:38:45
举报
文章被收录于专栏:python进阶学习

在互联网上进行自动数据采集已是互联网从业者的常规操作,爬虫程序想要长期稳定地进行数据采集,都会使用到爬虫代理来避免目标网站的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属于正常情况。如大量出现,建议在不使用代理的情况下检查目标网站是否可以访问。 可能由目标网站的防护措施导致。

代理在爬虫程序里面的实现也是很重要的一部分,以下就提供一个demo给有需要学习的朋友参考参考,各种语言之间代理的使用有细微的差别,可以搜索亿牛云了解其他语言的参考示例。

代码语言: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 条评论
热度
最新
推荐阅读
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档