如今地狱已经成了我们最基本的日常交通工具,大家觉得全国有多少个城市开通了地铁?带着这些疑问我们今天就介绍一种新的 获取城市地铁站点数据的方法,而且不再只是北上广深四个城市,而是 全国开通地铁的城市。
今天要访问的目标网站是:http://map.amap.com/subway/index.html这个是高德地图对于全国地铁站点的一个可视化界面,做的相当不错,而且有接口更是方便我们直接获取数据,我们通过遍历城市集合,构造每一个城市的 url,然后访问 url,爬取对应城市的地铁站点数据,整个过程实现起来比较简单,代码我们借用了亿牛云的爬虫代理示例,主要是hi和大家分享下在爬虫程序里面如何使用代理,代码大致如下:
// 要访问的目标页面 string targetUrl = "http://map.amap.com/subway/index.html"; // 代理服务器(产品官网 www.16yun.cn) string proxyHost = "http://t.16yun.cn"; string proxyPort = "31111"; // 代理验证信息 string proxyUser = "16TVBQN"; string proxyPass = "813688"; // 设置代理服务器 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(); }
数据已经有了,抽样验证了一下,发现只有少数站点的区域不对,手动处理一下就行。爬到的数据已经确认无误,接下来就是如何分析的问题了。