python获取地图坐标数据并存入数据库

news/2024/7/19 11:08:36 标签: python, 数据库, json, 爬虫

需求: 需要爬取到浙江省各个县区的边界的geo数据,用于后续前端绘制地图使用。

解决方案: 1、找到浙江省各个县区的边界数据,这里从阿里云数据(阿里云地图数据可视化)中获取;2、编写爬虫脚本获取数据;3、存入数据库

具体实现:

python">import pymssql
import random
import time

# 地图数据链接
"""
https://geo.datav.aliyun.com/areas_v3/bound/330000.json
"""

import json
import requests


def get_zhejiang_code(shi_all_json):
	code_list = []
	for shi_dict in shi_all_json["features"]:
		code = shi_dict["properties"].get("adcode")
		code_list.append(code)
	return code_list


def get_datas(version, code_list):
	"""爬取并解析数据"""
	insert_data_list = []
	for i in range(len(code_list)):
		url = "https://geo.datav.aliyun.com/{version}/bound/{code}.json".format(version=version, code=code_list[i])
		try:
			response = requests.get(url=url)
			feature = response.json().get("features")[0]
			code = feature["properties"].get("adcode")
			name = feature["properties"].get("name")
			data = {
				"code": code,
				"name": name,
				"feature": feature,
				"version": version
			}
			insert_data_list.append(data)
			print("成功爬取 {code},还剩 {num}个".format(code=code, num=len(ZheJiang_provinces_code_v3)-i))
			time.sleep(random.randint(1, 3))
		except:
			pass
	return insert_data_list


# 插入数据库
def insert_into_model(insert_data_list):
	connect = pymssql.connect(host="XXXXXXX", user="XXXX", password="XXXXX", database="XXXXXXX")
	cursor = connect.cursor()
	try:
		for data in insert_data_list:
			sql = """
				insert into 表名 values('{code}','{name}', '{feature}', '{version}');
			""".format(code=data.get("code"), name=data.get("name"), feature=json.dumps(data.get("feature")),
					   version=data.get("version"))
			cursor.execute(sql)
	except Exception as e:
		print(e)
	connect.commit()


if __name__ == '__main__':
	# 浙江省,浙江省各市,浙江省各区县编码
	ZheJiang_provinces_code_v3 = [330100, 330200, 330300, 330400, 330500, 330600, 330700, 330800, 330900, 331000,
								  331100,
								  330102, 330105, 330106, 330108, 330109, 330110, 330111, 330112, 330114, 330113,
								  330122,
								  330127, 330182, 330203, 330205, 330206, 330211, 330212, 330213, 330225, 330226,
								  330281,
								  330282, 330302, 330303, 330304, 330305, 330324, 330326, 330327, 330328, 330329,
								  330381,
								  330382, 330383, 330402, 330411, 330421, 330424, 330481, 330482, 330483, 330502,
								  330503,
								  330521, 330522, 330523, 330602, 330603, 330604, 330624, 330681, 330683, 330702,
								  330703,
								  330723, 330726, 330727, 330781, 330782, 330783, 330784, 330802, 330803, 330822,
								  330824,
								  330825, 330881, 330902, 330903, 330921, 330922, 331002, 331003, 331004, 331022,
								  331023,
								  331024, 331081, 331082, 331083, 331102, 331121, 331122, 331123, 331124, 331125,
								  331126,
								  331127, 331181]
	ZheJiang_provinces_code_v2 = [330100, 330200, 330300, 330400, 330500, 330600, 330700, 330800, 330900, 331000, 331100,
								  330102, 330103, 330104, 330105, 330106, 330108, 330109, 330110, 330111, 330112, 330122,
								  330127, 330182, 330203, 330205, 330206, 330211, 330212, 330213, 330225, 330226, 330281,
								  330282, 330302, 330303, 330304, 330305, 330324, 330326, 330327, 330328, 330329, 330381,
								  330382, 330383, 330402, 330411, 330421, 330424, 330481, 330482, 330483, 330502, 330503,
								  330521, 330522, 330523, 330602, 330603, 330604, 330624, 330681, 330683, 330702, 330703,
								  330723, 330726, 330727, 330781, 330782, 330783, 330784, 330802, 330803, 330822, 330824,
								  330825, 330881, 330902, 330903, 330921, 330922, 331002, 331003, 331004, 331022, 331023,
								  331024, 331081, 331082, 331083, 331102, 331121, 331122, 331123, 331124, 331125, 331126,
								  331127, 331181]

	# res_insert_data_list = get_datas(version="areas_v2", code_list=ZheJiang_provinces_code_v2)
	# res_insert_data_list = get_datas(version="areas_v3", code_list=ZheJiang_provinces_code_v3)
	# print("开始插入表格--->")
	# insert_into_model(insert_data_list=res_insert_data_list)
	# # for i in res:
	# # 	print(i)
	# print("插入完成!")

仅供学习使用,侵权联删!


http://www.niftyadmin.cn/n/1096662.html

相关文章

hdu4847 Wow! Such Doge!(简单题+坑爹的输入)

转载请注明出处:http://blog.csdn.net/u012860063?viewmodecontents 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid4847 -----------------------------------------------------------------------------------------------------------------…

python用栈实现四则表达式(表达式中包含负数和小数)附全部代码

文章目录需求问题解决方案实现步骤**1、** 对算式进行切割,得到可以进行计算的列表**2、** 将中缀表达转化为后缀表达式(用栈实现)**3、** 从左到右依次访问后缀表达式,计算公式结果完整代码实现 :需求问题 在实际使用…

ffmpeg和SDL的多媒体编程(一)制作屏幕录像

ffmpeg和SDL的多媒体编程(一)制作屏幕录像 概要 电影文件有很多基本的组成部分。首先,文件本身被称为容器Container,容器的类型决定了信息被存放在文件中的位置。AVI和Quicktime就是容器的例子。接着,你有一组流,例如&#x…

get和post请求的设置

1、post的请求设置 2、get请求的设置 转载于:https://www.cnblogs.com/angongIT/p/3912678.html

linux opkg安装的文件到哪里了,通过openpctv简单学习opkg安装与生成包的一些过程...

OpenPCTV - 让你的HTPC拥有更全面的电视功能通过linuxtoy了解到openPCTV是使用opkg打包的获得源代码:git clone git://git.code.sf.net/p/openpctv/code openpctv-code下载完后发现原来不是基于buildroot的,而是采用脚本和makefile方式结合实现的自动化编…

每天进步一点点--结构化异常处理(SEH)

结构化异常处理 英文是SEH。但这个词条似乎被占用了。所以我只能用这个词条了。SEH是WINDOWS系统中处理计算机异常行为的一种方式,这种方式的特点就是用入栈的方式把断点保存起来,所以他的效率很高,往往能够处理很多的异常状态。Microsoft c/…

Xcode 代码格式化/自动排版

Xcode 版本:4.2和4.2之前的版本 选中需要格式化代码 -> Edit -> Format ->Re-Indent Xcode 版本:4.2之后的版本 选中需要格式化代码 -> Editor -> Structure ->Re-Indent 或者 选中需要格式化代码 -> 右击 ->选中 Struct…

利用curl计算网络文件大小

1 double zipsize 0;2 CURL *handle curl_easy_init();3 curl_easy_setopt(handle, CURLOPT_URL, url);4 curl_easy_setopt(handle, CURLOPT_HEADER, 1); //只需要header头5 curl_easy_setopt(handle, CURLOPT_NOBODY, 1); //不需要body6 7 if (…