找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 574|回复: 0

如何在requests中使用代理进行工作

[复制链接]

93

主题

6

回帖

113

积分

初中生

热心值
2
IT币
595
贡献值
1
QQ
发表于 2022-11-25 16:28:15 | 显示全部楼层 |阅读模式
我们在做爬虫的时候会遇到这种情况,爬取某个网站的时候,最初爬虫是正常运行的,一段时间后,网页就会出现错误,例如403fobbiden。这种情况就是服务器采取了反爬机制,再一段时间内某个ip访问服务器的次数过高,服务器就会对该ip拒绝服务并报错。ip代理就是让服务器接收到你的请求时显示出来是不同的ip地址进行的访问。
很多新手朋友不知道requests如何使用代理IP进行爬虫工作,今天来简单的说一下,接下来我会给大家详细的展示如何在使用的请求库上增加代理进行访问。亿牛云代理IP有两种授权方式,分别是以api链接方式获取IP,以优质代理IP为重点产品。还有就是以隧道模式为主的爬虫代理,经过两种方式的使用对比,个人比较推荐隧道代理, 这种代理产品自带IP池随机切换,直接配置代理信息即可使用方便快捷,参考对方提供的demo完全自动化使用简单粗暴的方式逐页爬行就可以。如何在requests里面实现看示例:
// 要访问的目标页面
string targetUrl = "http://httpbin.org/ip";


// 代理服务器(产品官网 it帮论坛真好)
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();
}
对于爬虫来说两种方式都是可行的,不存在哪种更优,是需要根据的爬虫项目场景需求来选择的。[size=1em]


[backcolor=var(--yq-bg-primary)][color=var(--yq-text-primary)]



[color=var(--yq-text-primary)][backcolor=var(--yq-bg-primary)]







ITbang.Net是一个IT教程分享社区!

寻找论坛资源请善用论坛搜索功能,这样会为你节约不少学习时间;

论坛资源如有过期链接失效等,请到教程反馈区发帖反馈,我们会为您良好的行为点赞加分!

回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

免责声明:
IT帮论坛所发布的一切视频资源、工具软件和网络技术相关的文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该资源,请支持正版软件,购买注册,得到更好的正版服务。

Mail To:Service@ITbang.Net

QQ|Archiver|手机版|小黑屋|IT帮社区 ( 冀ICP备19002104号-2 )

GMT+8, 2024-7-27 17:44 , Processed in 0.061404 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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