近期,受疫情影响,快递企业存在用工缺口导致运力不足。连日来,多地快递揽投量开始持续回升为解决运力不足问题,北京市邮政管理局督促各快递企业全国总部加紧调派京外力量驰援各地。
为全力化解现存积压问题,责成各快递企业制定消减积压邮件方案,并制定两天内的具体细化安排,对重点区域,药品、防疫物资等重点物品优先保障投递派送;确保暂时关停的网点即日全部恢复正常运行,对积压严重的分拨中心实施“拔钉子”措施,细分积压快递类型,对投递较为集中的大型社区,通过组织货车运力,由分拨中心直运至社区进行投递,减少网点分拣环节,提高效率。
刚好这两天阳了在家,看到一些网友在发视频调侃自己的快递派送像是龟速前行。所以我做一个通过快递100这个网站查快递物流信息的爬虫。研究了一下,发现实现起来不是很复杂,在此整理成文档并share给大家。
爬取思路也很简单:输入运单号后从服务器获取快递公司对应的ID号,然后拼接出新的请求地址来获取相关信息,代码分解如下:
// 要访问的目标页面 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(); }
这部分代码主要是添加了代理IP的实现,因为分析网站后发现网站回限制IP的访问次数。代理的添加是整个爬虫过程中比较简单的,但是代理的选择并不容易,网上有太多的代理广告,代理质量参差不齐,经过一些测试对比选择了某牛云代理。基于上述代码,大家后续可以继续优化。比如加个随机ua什么的,或者做一些快递单号返回值的判断,用多线程来提高一下效率等等。