获取百度地图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 = ; i < ; i++)
{ try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(href_item_arr[].Substring(,href_item_arr[].Length-)+"_"+(i+)+"/");
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[]); if (collection.Count == ) break; foreach (var item in collection)
{
string[] dataArr = item.ToString().Split(new string[] { ">", "</a>" }, StringSplitOptions.RemoveEmptyEntries);
sb.Append(dataArr[] + ",");
}
}
catch
{
break;
}
Console.WriteLine(href_item_arr[] + " " + (i + )+" "+(list.IndexOf(href_item)+)+"/"+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[].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 != )
{
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数据~
获取百度地图POI数据二(准备搜索关键词)的更多相关文章
- 获取百度地图POI数据三(模拟关键词搜索)
上一篇博文中讲到如何获取用于搜索的关键词,并且已经准备好了一百五十万的关键词 这其中有门牌号码,餐馆酒店名称,公司名称,道路名称等.有了这些数据,我们就可以通过代码,模拟我们在百度地图的搜索框中搜 ...
- 基于 Golang 完整获取百度地图POI数据的方案
百度地图为web开发者提供了基于HTTP/HTTPS协议的丰富接口,其中包括地点检索服务,web开发者通过此接口可以检索区域内的POI数据.百度地图处于数据保护对接口做了限制,每次访问服务,最多只能检 ...
- 获取百度地图POI数据一(详解百度返回的POI数据)
POI是一切可以抽象为空间点的现实世界的实体,比如餐馆,酒店,车站,停车场等.POI数据具有空间坐标和各种属性,是各种地图查询软件的基础数据之一.百度地图作为国内顶尖的地图企业,其上具有丰富的POI数 ...
- 百度地图POI数据爬取,突破百度地图API爬取数目“400条“的限制11。
1.POI爬取方法说明 1.1AK申请 登录百度账号,在百度地图开发者平台的API控制台申请一个服务端的ak,主要用到的是Place API.检校方式可设置成IP白名单,IP直接设置成了0.0.0.0 ...
- 百度地图POI爬取
我们研究生的课程内容,做下笔记记录一下. 使用的python环境是python3.7 用的图大部分都是老师ppt里的图,懒得自己截了-- 申请百度开发者密匙 (1)注册百度用户,注册过的话,直接登录就 ...
- Android 百度地图开发(二)--- 定位功能之MyLocationOverlay,PopupOverlay的使用
转载请注明出处http://blog.csdn.net/xiaanming/article/details/11380619 这一篇文章主要讲解的是百度地图的定位功能,然后还有MyLocationOv ...
- 【百度地图API】建立全国银行位置查询系统(四)——如何利用百度地图的数据生成自己的标注
原文:[百度地图API]建立全国银行位置查询系统(四)--如何利用百度地图的数据生成自己的标注 摘要: 上一章留个悬念,"如果自己没有地理坐标的数据库,应该怎样制作银行的分布地图呢?&quo ...
- Android 百度地图开发(二)
这一篇文章主要解说的是百度地图的定位功能,然后还有MyLocationOverlay和PopupOverlay两个地图覆盖物的使用.Overlay是"图层"或"覆盖物&q ...
- iOS地图集成示例:百度地图POI检索
一.集成百度地图(傻瓜教程,以网站说明文档为准,此处罗列几项主要步骤) 1.登录 http://lbsyun.baidu.com 百度地图开发者平台,获取SDK和集成文档. 2.百度地图可以提供的 ...
随机推荐
- laravel——基础增删改查
一.控制器代码 <?php namespace App\Http\Controllers; use Illuminate\Support\Facades\DB; class CurdContro ...
- P2678 跳石头
传送门 思路: 二分跳跃的最短距离 mid .暴力判断如果有两个石头直接的距离小于 mid ,就把这个石头拿走.如果拿走的石头数目 cnt ≤ m,说明二分的答案可行,ans = mid,接着二分更短 ...
- 1047 Integer Inquiry
String 大数加法模板 #include<stdio.h> #include<string> #include<iostream> using namespac ...
- kubernetes1.13.5安装部署
Kubernetes 一. Kubernetes介绍 各节点所需组件 Master:docker,kubeadm,kubelet, 组件 版本 备注 Kubelet 1.13.5 组件 Kube ...
- guxh的python笔记十一:异常处理
1,抓错方法 name = [0, 1, 2] try: name[3] except IndexError as exc: # 抓单个错误,打印错误信息e print(exc) except (In ...
- hdoj3247
注意fail时怎么走. #include <iostream> #include <cstdio> #include <cmath> #include <al ...
- 三个水杯——java,广度优先搜索
题目如下: 21-三个水杯 内存限制:64MB 时间限制:1000ms 特判: No通过数:51 提交数:137 难度:4 题目描述: 给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个 ...
- 华为的云计算基于openstack #stackalytics#
华为的云计算基于openstack,具体实力可以参考openstack 社区提供的stackalytics http://stackalytics.com/
- 基于iview 封装一个vue 表格分页组件
iview 是一个支持中大型项目的后台管理系统ui组件库,相对于一个后台管理系统的表格来说分页十分常见的 iview是一个基于vue的ui组件库,其中的iview-admin是一个已经为我们搭好的后天 ...
- jmeter 上传附件 如图片
1.要勾选 Use multipart/form-data for POST,否则request中将不包含上传的文件 2.MIME类型为application/octet-stream 图如下:对应 ...