获取百度地图POI数据二(准备搜索关键词)

上篇讲到  想要获取尽可能多的POI数据 需要准备尽可能多的搜索关键字   那么这些关键字如何得来呢?   本人使用的方法是通过一些网站来获取这些关键词   http://poi.mapbar.com/这个网站有全国各地的POI数据  对各个城市的POI数据都有归类  我便是从这个网站上面获取了上海市的各个类别的关键词  比如上海市所有的门牌号码  公路名称  地铁名称等等  下面介绍如何获取这些信息

和获取百度POI数据所用的方法一样,都是通过分析这个网站的url然后替换其中的参数获取不同的数据  这个网站的数据分列在不同的类别中

每一个类别都对应一个url  这个可以通过查看网页源码查看

点击对应的url地址就可查看该类别包含的数据  比如查看上海所有中餐馆的名称

输入url  http://poi.mapbar.com/shanghai/110/   就可以看到所有中餐馆数据

当然 这些数据都是分页显示   对url稍作修改就能分页的形式查看数据    http://poi.mapbar.com/shanghai/110_1/   表示中餐馆数据中的第一页数据  有的数据有多页 有的数据仅有一页    这些餐馆名称便可以当作在百度地图中搜索的关键词   通过程序下载这些网页再借助正则表达式便能够将每个关键词保存下来    要想让程序自动完成整个操作  首先要获取所有类别及其对应的关键词   这个可以通过将网页的html代码下来  自己创建一个网页  再引入jquery 借助jquery强大的选择器  将其中<a>标签的href属性给选取出来

以下是本人获取的所有类别及其url

有了这些数据  那么就可通过程序来完成所有关键词的获取了  以下是程序源码

    class Program
    {
        static void Main(string[] args)
        {
            string hrefInfo = File.ReadAllText(@"C:\Users\Administartor\Desktop\href.txt",Encoding.Default);
            List<string> list = hrefInfo.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries).ToList();

            DataTable dt = SqlHelper.ExecuteDataTable("select KWName,KWType from SHKW",CommandType.Text);
            List<string> kwList = new List<string>();
            foreach (DataRow row in dt.Rows)
            {
                kwList.Add(row["KWName"].ToString());
            }
            foreach (string href_item in list)
            {
                StringBuilder sb = new StringBuilder();
                string[] href_item_arr = href_item.Split(‘,‘);
                for (int i = 0; i < 1000; i++)
                {

                    try
                    {
                        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(href_item_arr[0].Substring(0,href_item_arr[0].Length-1)+"_"+(i+1)+"/");
                        request.Method = "GET";
                        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                        Stream responseStream = response.GetResponseStream();
                        StreamReader sr = new StreamReader(responseStream, Encoding.UTF8);
                        string restring = sr.ReadToEnd();
                        string[] strArr = restring.Split(new string[] { "<div class=\"sortC\">", "<div class=\"sortPage cl\" id=\"pageDiv\"" }, StringSplitOptions.None);
                        Regex regex = new Regex("<a.*</a>");
                        MatchCollection collection = regex.Matches(strArr[1]);

                        if (collection.Count == 0) break;

                        foreach (var item in collection)
                        {
                            string[] dataArr = item.ToString().Split(new string[] { ">", "</a>" }, StringSplitOptions.RemoveEmptyEntries);
                            sb.Append(dataArr[1] + ",");
                        }
                    }
                    catch
                    {
                        break;
                    }
                    Console.WriteLine(href_item_arr[1] + "  " + (i + 1)+"  "+(list.IndexOf(href_item)+1)+"/"+list.Count);
                }//end for
                string[] kwArr = sb.ToString().Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
                DataTable dataDt = new DataTable();
                dataDt.Columns.Add("KWName", typeof(string));
                dataDt.Columns.Add("KWType", typeof(string));
                dataDt.Columns.Add("SaveTime", typeof(DateTime));
                string type=href_item_arr[1].Replace("/", "").Replace("\\", "");
                foreach (string kw in kwArr)
                {

                    if (kwList.Contains(kw)) continue;
                    kwList.Add(kw);
                    dataDt.Rows.Add(kw, type, DateTime.Now);
                }
                if (dataDt.Rows.Count != 0)
                {
                    string res = "";
                    if (SqlHelper.DataTableToDB("SHKW", dataDt)) res = "成功";
                    else res = "失败";
                    Console.WriteLine(res + "写入KW" + " " + dataDt.Rows.Count + "个");
                }
                else
                {
                    Console.WriteLine(type+" 无数据");
                }
            }

            Console.WriteLine("OK");
            Console.ReadKey();

        }
    }

查看数据库保存的关键词的数据

select * from SHKW

select count(*) from SHKW

有了这一百万条关键词的信息   下一步就可以构建获取百度地图POI数据的url了     下篇接着讲解如何获取百度地图的POI数据~

时间: 2024-10-17 04:05:19

获取百度地图POI数据二(准备搜索关键词)的相关文章

获取百度地图POI数据三(模拟关键词搜索)

上一篇博文中讲到如何获取用于搜索的关键词,并且已经准备好了一百五十万的关键词   这其中有门牌号码,餐馆酒店名称,公司名称,道路名称等.有了这些数据,我们就可以通过代码,模拟我们在百度地图的搜索框中搜索地点,从而获取其返回的POI数据.下面直接上代码~ 一 .准备好用于存储数据的数据库表 由于百度返回的POI数据都是JSON字符串且子节点非常多,为了按照子节点一一存储,就需要建这么一张包含很多字段的表,虽然麻烦,但是信息很全面.当然各位也可以选择性的存储其中的数据. 二.获取并解析数据的代码 c

获取百度地图POI数据一(详解百度返回的POI数据)

POI是一切可以抽象为空间点的现实世界的实体,比如餐馆,酒店,车站,停车场等.POI数据具有空间坐标和各种属性,是各种地图查询软件的基础数据之一.百度地图作为国内顶尖的地图企业,其上具有丰富的POI数据,要获取其上的POI数据可以根据百度地图提供的API,但是这种方式有限制,能获取的数据极少.本文将详细介绍通过模拟HTTP请求的方式获取其上的POI数据. 当我们在百度地图的搜索框中通过输入关键字进行搜索时,这其实就是发送一个HTTP请求到百度的服务器,然后服务器返回数据. 打开网页的调试面板可以

百度地图POI数据爬取,突破百度地图API爬取数目“400条“的限制11。

1.POI爬取方法说明 1.1AK申请 登录百度账号,在百度地图开发者平台的API控制台申请一个服务端的ak,主要用到的是Place API.检校方式可设置成IP白名单,IP直接设置成了0.0.0.0/0比较方便. Place API 提供的接口用于返回查询某个区域的某类POI数据,且提供单个POI的详情查询服务,用户可以使用C#.C++.Java,Python等开发语言发送请求,接收json.xml的数据.关于Place API的具体使用可以参考:Place API Web服务API 1.2爬

Android 百度地图开发(二)

这一篇文章主要讲解的是百度地图的定位功能,然后还有MyLocationOverlay和PopupOverlay两个地图覆盖物的使用,Overlay是"图层"或"覆盖物"的意思,MyLocationOverlay从名字上面理解就是我的位置图层,他能够实现在地图上显示当前位置的图标以及指南针,MyLocationOverlay只负责显示我的位置,位置数据请使用百度定位SDK获取,将获取的位置数据放在一个LocationData结构中并用该结构设置MyLcationOve

iOS地图集成示例:百度地图POI检索

一.集成百度地图(傻瓜教程,以网站说明文档为准,此处罗列几项主要步骤) 1.登录  http://lbsyun.baidu.com  百度地图开发者平台,获取SDK和集成文档. 2.百度地图可以提供的一些服务 (1)地图:提供地图展示和地图操作功能: (2)POI检索:支持周边检索.区域检索和城市内兴趣点检索: (3)地理编码:提供经纬度和地址信息相互转化的功能接口: (4)线路规划:支持公交.驾车.步行.骑行,四种方式的线路规划: (5)覆盖物图层:支持在地图上添加覆盖物(标注.几何图形.热力

【百度地图API】建立全国银行位置查询系统(四)——如何利用百度地图的数据生成自己的标注

原文:[百度地图API]建立全国银行位置查询系统(四)--如何利用百度地图的数据生成自己的标注 摘要: 上一章留个悬念,"如果自己没有地理坐标的数据库,应该怎样制作银行的分布地图呢?" 答案就是,利用百度地图上的数据. ---------------------------------------------------------------------------------------------- 我们不用花大把时间写代码去跑数据,只需要利用百度地图API提供的免费接口,就可以

教你如何拔取百度地图POI兴趣点

教你如何拔取百度地图POI兴趣点 通过聚合数据提供的接口,获取百度地图的POI兴趣点,并存储至数据库中. 实现: 1.聚合数据百度POI接口说明 调用聚合数据,首先得注册聚合.聚合数据提供的百度地图POI的接口有三个:数据分类,查询数据和获取周边数据.想要获取百度POI兴趣点,涉及到的接口为数据分类,查询数据. a.数据分类 接口地址:http://apis.juhe.cn/baidu/getCategory 支持格式:JSON/XML 请求方式:GET 请求示例:http://apis.juh

iOS百度地图poi检索(基于百度地图2.3.0SDK开发)

正好做到百度地图的poi检索,拿来分享一下,基于百度地图2.3.0SDK开发,说实话,这个新版本poi真不好用 先来看头文件里面,定义poi对象,当然你也可以写到实现文件里面 #import <UIKit/UIKit.h> #import "BMapKit.h" @interface NearByPlaceViewController : ViewControllerBase <BMKPoiSearchDelegate> {     BMKPoiSearch *

根据城市名获取百度地图坐标API

最近项目中百度地图的相关操作当没有坐标的时候默认通过城市名称获取中心点,不过感觉有点慢到网上搜索了一下也没类似的城市对应的价格的数据库.所以自己就建了一个.现公开出来供大家使用接口调用方法 http://2.ibtf.sinaapp.com/map/?city=北京返回json串 {"x":"116.403874","y":"39.914889"} 注1.城市名请用UTF-8编码否则会出错2.如返回 please reload