🙇♀️对不起我是标题党,但是应该调用不同地图运营商API爬数据大同小异,大家看着不同运营商的开发文档做适当调整就好了~~~我这里就拿腾讯位置服务为例了。
😋爬虫前需要铺垫一些知识,这样可以帮助我们更好地理解代码以及爬虫的机制__其实我也是一知半解,因为最近的课设接触这方面,如果有说的不对请指正🙇♀️!而且代码是参考了往年的学姐的资料,学姐如果你发现你的代码被我抄袭了,请原谅我!!!私密马赛😭
目录
1.关于爬取的流程机制
接触爬虫前,经常会听到讲要“学习HTTP协议”、“考虑反爬虫措施”......🤔啥也不懂,我觉得也不用太懂,因为各种库会帮你解决这个问题,你会用代码以及大概知道代码中哪部分是完成这个工作就行了...(勿喷,我没有深究的志向)
最最最重要的就是好好看开发文档,里面有说明必填的参数,以及有实际的例子。😇爬取数据可以抽象地理解为:把研究区域细分为圆形、矩形或是行政区县(不同的搜索方式),然后遍历这些细分的研究区域,每次生成新的URL爬取数据。
附上地点搜索开发文档:WebService API | 腾讯位置服务
每次生成新的URL在代码中的体现(以矩形搜索为例):
url0 = 'https://apis.map.qq.com/ws/place/v1/search'
# 构造查询参数,包括区域边界、API密钥、搜索关键字等
query = {
'boundary': 'rectangle(' + str(data['Y_min'][i]) + ',' + str(data['X_min'][i]) + ',' +
str(data['Y_max'][i]) + ',' + str(data['X_max'][i]) + ')',
'key': '', # 填你的API密钥
'keyword': '厕所', # 搜索关键字,这里为厕所
'page_size': 20, # 每页返回的最大地点数量
'page_index': x # 当前页码
}
# 拼接完整的请求URL
url = url0 + '?' + urllib.parse.urlencode(query)
而每次新的URL响应返回的消息如何保存呢?因为我没有很了解Python的数据结构🤡,抽象地理解就是要先定义一个字典(相当于定义数据库的“字段”),然后将爬取的数据填到这个字典中。在代码中是这样体现的:
# 初始化一个字典以存储从API返回的结果
res = {
"id": [], # 存储地点的ID
"title": [], # 存储地点的名称
"address": [], # 存储地点的地址
"lng": [], # 存储地点的经度
"lat": [] # 存储地点的纬度
}
# 将响应的JSON文本解析为Python字典
response = json.loads(response.text)
# 检查API返回的状态是否正常(status为0表示成功)
if response.get('status') == 0:
POIs = response.get('data') # 获取地点数据
for poi in POIs:
# 将每个地点的信息添加到结果字典中
res["id"].append(poi['id'])
res["title"].append(poi['title'])
res["address"].append(poi['address'])
res["lng"].append(poi['location']['lng'])
res["lat"].append(poi['location']['lat