百度地图POI数据采集方案以及开发环境搭建

#获取百度地图POI数据一(详解百度返回的POI数据) http://lbsyun.baidu.com/index.php?title=webapi
 数据量标准可以参看	http://lbsyun.baidu.com/apiconsole/key#/home 额度管理=>开发者权益
 余慕白 博客 https://www.cnblogs.com/yumubaime/p/7172954.html

1.模拟HTTP请求的方式获取其上的POI数据
	打开网页的调试面板可以清楚的看到这些请求 ,以及服务器返回的数据  ,这些数据都是JSON格式的   
	在地址栏中输入请求的url
		http://map.baidu.com/?newmap=1&reqflag=pcmap&biz=1&from=webmap&da_par=direct&pcevaname=pc4.1&qt=s&da_src=searchBox.button&wd=%E4%BA%BA%E5%90%8D%E5%B9%BF%E5%9C%BA&c=289&src=0&wd2=&sug=0&l=17&b=(13522376.995,3640442.635;13522548.995,3641718.635)&from=webmap&biz_forward={%22scaler%22:1,%22styles%22:%22pl%22}&sug_forward=&tn=B_NORMAL_MAP&nn=0&u_loc=13506522,3642064&ie=utf-8&t=1500039457397  
	之后便能看到返回的JSON数据  将这些JSON文本复制到JSON在线校验的网站(如 www.json.cn)上可以更清楚的看到其中的信息

	要想通过程序模拟构建url来发送http请求 ,就需要先了解url的参数构成  ,经过本人的多次尝试 ,将url参数减少为
		http://map.baidu.com/?newmap=1&reqflag=pcmap&biz=1&from=webmap&da_par=direct&pcevaname=pc4.1&qt=s&da_src=searchBox.button&wd=人民广场&c=289&pn=0
		http://map.baidu.com/?newmap=1&reqflag=pcmap&biz=1&from=webmap&da_par=direct&pcevaname=pc4.1&qt=s&da_src=searchBox.button&wd=丽江市居民小区&c=114&pn=0
		http://map.baidu.com/?newmap=1&reqflag=pcmap&biz=1&from=webmap&da_par=direct&pcevaname=pc4.1&qt=s&da_src=searchBox.button&wd=红谷坊复合餐厅&c=131&pn=0
		关键词 具体小分类+地址名(居民小区+八河)
	最重要的就是最后三个参数  
		wd是搜索的关键词   
		c是搜索区域对应的城市编码,上海市对应的就是289 
			(百度地图城市名称-城市代码(cityCode)关系对照文本 http://lbsyun.baidu.com/index.php?title=open/dev-res)
		pn是返回数据的页码  
		不同的搜索关键词返回的数据的页数是不同的   因为百度会返回很多相关的信息(POI数据)
	
2.获取尽可能多的POI数据 需要准备尽可能多的搜索关键字,那么这些关键字如何得来呢? 	
	http://poi.mapbar.com/这个网站有全国各地的POI数据  对各个城市的POI数据都有归类

3.百度墨卡托坐标转换为经纬度坐标 自己申请ak AC818d0cec3d6e8bb07b715a549741a7
	http://api.map.baidu.com/geoconv/v1/?coords=" + x / (100.0) + "," + y / (100.0) + "&from=6&to=5&ak=AC818d0cec3d6e8bb07b715a549741a7";
	http://api.map.baidu.com/geoconv/v1/?coords=13523361.19,3641423.43&from=6&to=5&ak=AC818d0cec3d6e8bb07b715a549741a7
	
	可以替换为代码 不使用API 因为API一天只能转换10条数据

4. 289,上海市
	分类 
		关键字 
			poi解析获取
				百度墨卡托坐标转换为百度经纬度坐标
				
5.开发环境搭建 vs code + Anaconda(python) + scrapy
	Anaconda:python的基础库,官网下载 多点击几次就可以下载了 不需要注册用户名
		官网:https://www.anaconda.com/products/individual
		清华源:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/    比较快
		安装参看 (推荐)  Anaconda + VSCode 最详细教程 https://www.jianshu.com/p/ef1ae10ba950  	
			勾选 Alls Users
			勾选 Add Anaconda to the system PATH environment variable  如果之前安装过python 勾选会报错 冲突
			如果未勾选添加环境变量  则手动添加
				C:\ProgramData\Anaconda3;
				C:\ProgramData\Anaconda3\Scripts;
				C:\ProgramData\Anaconda3\Library\bin;
				C:\ProgramData\Anaconda3\python.exe
			如果之前没有安装 VSCode,可以在 Anaconda 安装过程中选择安装
			
	输出控制台乱码问题解决
		https://blog.csdn.net/qq_44735604/article/details/105954842
		
	Anaconda + vs code 的 scrapy环境搭建
		(推荐)Anaconda + VSCode 最详细教程 https://www.jianshu.com/p/ef1ae10ba950  			
								  补充教程 https://blog.csdn.net/qq_40922859/article/details/100855206
	
	
	打开建好的爬虫文件夹(作为项目所在地)
	vs终端打开(目录路径确认好)
	在终端中创建爬虫项目:scrapy startproject baidupoispider
	具体爬虫文件
		 scrapy genspider baidupoi map.baidu.com
		 //释:    生成     爬虫名字   要爬的域名
    开启爬虫
		scrapy crawl xicidaili


    程序逻辑 
		#爬取图吧网站的地址
		1.爬取所有城市信息 地址+城市名称(热门城市和非热门城市)
			图吧网站提供378城市(自己查询的)
			百度城市编码387个
			以城市为分隔库的标准 每个城市数据一个sqlite库文件 不至于文件太大 数据搬迁也方便 
			最后可以for循环启动378个城市爬虫(下面具体实现城市爬虫)即可
			
		2.先以一个城市为例 city北京市 cityCode131 https://poi.mapbar.com/beijing/
			获取分类信息:大分类root_type(旅游景点),具体分类typeitems(游乐园、植物园、......))
			typeitems:
				cityCode cityName root_type(旅游景点),具体分类typeitem(游乐园),具体分类(游乐园)typeitem href
			分类标签:<div class="isortRow">
		3.根据分类 分类typeitem href 得到具体这个分类中的 地名信息集合 address_items
					具体地址所在标签:<div class="sortC">
					for循环 分页 从第2页开始(当前页就是第一页了):<div class="sortPage cl" id="pageDiv" style="width:780px;">
					 再来一次具体分类信息检索(写成单独方法)
			最终表结构如下		
			address_items:
				cityCode ,cityName ,root_type(旅游景点,......),具体分类typeitem(游乐园,......),具体分类(游乐园)typeitem href ,address_name ,lon,lat
			
		4.存放到sqlite表中
		
		scrapy 相关设置
			0.多线程爬虫|Scrapy框架
				https://www.jianshu.com/p/1a894fe4a93c
			1.settings.py
				相关默认设置 
				https://doc.scrapy.org/en/latest/topics/settings.html#concurrent-items
				# Obey robots.txt rules
				ROBOTSTXT_OBEY = False #True
			2.Crawled (200) <GET https://poi.mapbar.com/beijing/> (referer: None)
				表示获取地址内容成功了
			3.xpath选择元素时
				nodename	选取此节点的所有子节点。
				/	从根节点选取。
				//	从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
				.	选取当前节点。
				..	选取当前节点的父节点。
				@	选取属性。
			4.yield scrapy.Request详解
				https://zhuanlan.zhihu.com/p/40290931
			5.数据类型转换
				https://www.cnblogs.com/klb561/p/9211268.html
			6.js动态生成页面 无法直接获取如何是否还有下一页 
				如果页码超过了实际页码 则此次页码请求自动终止,不会再次进入information_analysis方法
				如果当前有分页继续进行当前方法调用 js动态生成了页码 所以获取不到只能页码第加
			7.数据防篡改 深度copy ??????????????????????????
				我目前的理解是 在进入到pipline之前的过程 都是线程独立和安全的 所以数据 篡改 应该只出现在pipline中处理的item上
				我的csdn 登录状态
				https://editor.csdn.net/md/?articleId=89854794
				https://editor.csdn.net/md/?articleId=97549472
			8.Scrapy中response属性以及内容提取
				https://www.lagou.com/lgeduarticle/77001.html
			9.
				方法二:通过截取字符串相加的方式如下所示(该方式效率更高):

				新的字符串 = 老字符串[:要替换的索引位置] + 替换成的目标字符 + 老字符串[要替换的索引位置+1:]

				>>> a = "01234567"
				>>> a = a[:1] + 'a' + a[2:]
				>>> print a
				0a234567
			10.需要UserAgent 和 ip代理
				https://blog.csdn.net/Lan_cer/article/details/87551871
				https://zhuanlan.zhihu.com/p/29733174
			11.sqlite表需要创建好
			12.scrapy 从settings文件里获取值
				from scrapy.utils.project import get_project_settings
				class RandomUserAgent:
					def process_request(self, request, spider):
						settings=get_project_settings()
						USER_AGENT_LIST=settings.getlist("USER_AGENT_LIST")
						ua = random.choice(USER_AGENT_LIST)
						request.headers.setdefault('User-Agent', ua)
			13.使用vs code环境调试scrapy框架程序
				https://blog.csdn.net/zhaomengszu/article/details/88885852
			14.总是提示 参数类型不支持 
				其实是我的sql语句写发出错了 当中出现了 中文标点符号 分隔符 ‘,’
			15.Python操作sqlite 报错:sqlite3.OperationalError: database is locked
				python操作sqlite数据库时出现报错信息:
				sqlite3.OperationalError: database is locked
				查看网络资料后得知,是因为sqlite只支持单线程操作,所以如果此时其他软件等打开了这个数据库文件,当我们通过pycharm等编辑器进行操作的时候就会出现这个错误信息。
				这时候,我们从数据库管理软件中关闭数据库链接即可进行下一步操作。
			16.4:05
			17.百度墨卡托坐标 转百度经纬度坐标算法
				https://blog.csdn.net/sinat_34149445/article/details/100081478
			
			18.断点续爬 ?????????????????????????????
				https://www.cnblogs.com/Python-XiaCaiP/p/10268524.html
			19.提速 线程数?????????????????????????????????
				你想加大scrapy爬取的并发量、items的处理速度么?如果是的话,可以在settings.py上配置CONCURRENT_ITEMS、CONCURRENT_REQUESTS
				https://doc.scrapy.org/en/latest/topics/settings.html#concurrent-items
				
			20.【Scrapy】会导致整个线程阻塞的地方
				http://www.caneman.cn/?p=895
			21.scrapy请求队列:
				https://blog.csdn.net/zf3419/article/details/84580329
			{'address_lat': '0.0',
			 'address_lon': '0.0',
			 'address_name': '北京稻香·湖景酒店-会议厅',
			 'city_code': '131',
			 'city_name': '北京市',
			 'item_href': 'http://poi.mapbar.com/beijing/950/',
			 'item_sort': '北京市展览馆、会展中心',
			 'root_sort': '旅游景点'}
		#根据图吧网站爬取的地址 进行百度地图地址详细信息获取
			还是按照一个个城市来搞 分库存放
			按照大分类进行 地址 location经纬度信息的获取
			根据大分类生成多个爬虫 进行多进程的爬取 每个进程对应自己的数据库sqlite(单进程操作的数据库)
			
			1.为每条关键词记录生成一个 url 需要citycode address_name关键词 例如http://map.baidu.com/?newmap=1&reqflag=pcmap&biz=1&from=webmap&da_par=direct&pcevaname=pc4.1&qt=s&da_src=searchBox.button&wd=人民广场&c=289&pn=0
			  放到start_urls里面 生成请求队列 
			2.解析数据 获得需要的字段信息 创建item类
			
			3.存放信息到的位置选择 txt
			4.Scrapy中如何向Spider传入参数
				https://blog.csdn.net/pengjunlee/article/details/90604736
			5.python3  
				urllib.parse.urlencode
				urllib.request.openurl
			6.json
				json.dumps(): 对数据进行编码。
				json.loads(): 对数据进行解码。
			7.	问题解决 参数判空问题   
				http://map.baidu.com/?newmap=1&reqflag=pcmap&biz=1&from=webmap&da_par=direct&pcevaname=pc4.1&qt=s&da_src=searchBox.button&wd=%E5%8C%97%E4%BA%AC%E4%B8%9C%E5%B1%95%E5%AE%8F%E5%9B%BE%E9%92%A2%E9%93%81%E8%B4%B8%E6%98%93%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8&c=131&pn=0
				.py", line 88, in baidupoi_analysis
				content=body_to_json['content']
				KeyError: 'content'
				2020-10-21 17:00:00
				2020-10-22 07:59:26 [scrapy.core.engine] INFO: Spider closed (finished)
				15个小时
			8.百度经纬度纠偏
			9.scrapy-redis断点续爬??????????????????????????
				https://www.e1yu.com/8365.html
			10.scrapy_redis增量爬取
				https://www.jianshu.com/p/f03479b9222d   
				https://blog.csdn.net/weixin_42304193/article/details/92461582
			11.动态ip代理+scrapy框架 实现ip防禁用
				静态 https://zhuanlan.zhihu.com/p/29873560
				动态 https://blog.csdn.net/u010978757/article/details/83409571
			12.异步批量插入 sqlite3
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
最新的百度地图POI数据是指百度地图最近更新的地点信息。百度地图是一款提供地理位置搜索、导航等功能的手机应用程序,在其中使用POIPoint of Interest)数据来标记和展示各类地点的位置和详细信息。 百度地图POI数据集包含了各种类型的地点,例如餐厅、商店、酒店、医院、学校等。这些地点的数据将通过不定期的更新进行维护,以确保用户能够获取最准确和最新的信息。 最新的百度地图POI数据可以帮助用户查找和浏览周边地点,规划旅行路线,并获取相关的详细信息,如电话号码、地址、营业时间等。用户可以使用地图上的搜索功能,输入关键词或者分类来查找特定的地点。百度地图还提供导航和实时交通信息,使用户能够更方便地到达目的地。 百度地图POI数据的更新是通过百度数据采集与处理系统进行的。百度会收集来自各种渠道的数据,例如用户上传的地点信息、商户提供的数据、公共数据库等。这些数据会经过处理和整合,与地图数据进行关联,再通过算法和人工校验等步骤进行更新。 总而言之,最新的百度地图POI数据是通过不断更新和维护的,以提供用户最准确和最新的地点信息,帮助用户更好地使用百度地图进行位置搜索和导航。百度地图正致力于不断提升数据质量和用户体验,为用户提供更好的服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值