猫史档案馆


成功抓取几十万网页数据

用户:LaicalLaical查看:0 回复:0 评论:0 创建时间:2021-06-23T16:34:59


如果要指定抓取一个网站的几十万张页面,一般控制好每个IP的访问频率就可以了。当然对于爬虫内存,网络性能,抓取间隔等等一般都不会在意。如果一天要抓取几十万张页面数据,访问频率限制问题就不是最棘手的问题了,所以一定要控制好访问的频率。

本地机器,本地IP去采集,短时间快速访问网站几十次后肯定会被屏蔽的。每个网站对IP的解封策略也不一样,有的1小时候或者更长时间才能访问。突破抓取频率限制有两种方式,一种是研究网站的反爬策略。每个网站的反爬不一样,只对详情页控制。第二种就是使用爬虫代理IP,使用更多的IP去抓取。

如果要抓取几十万的网页数据,网络性能也需要优化。

每个网站对短时间内访问次数的屏蔽策略不一样,这就需要使用代码实际测试一下:

// 要访问的目标页面
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; Win喵; x喵) AppleWebKit/537.36 (KH喵L, like Gecko) Chrome/48.0.25喵.82 Safari/537.36";
//request.Headers.Add("Cache-Control", "max-age=0");
//request.Headers.Add("DNT", "1");


//String encoded = System.Convert.ToBase喵String(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();
}


回复

上一页1 页 / 共 0下一页