python requests爬取高德地图数据

本文介绍了一个使用Python爬取特定关键词(如水果店)的位置信息,并利用requests、lxml和xlsxwriter库将数据保存至Excel文件的方法。通过设置循环和条件判断,程序能够翻页爬取数据直至无更多结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.pip install requests

2.pip install lxml

3.pip install xlsxwriter

import requests #想要爬必须引
from lxml import html #这个是用于页面爬取
import xlsxwriter#操作Excel表格库

workbook = xlsxwriter.Workbook('E:/test/test.xlsx')# 新建的Excel表格文档路径
worksheet = workbook.add_worksheet() # 建立sheet, 可以work.add_worksheet('employee')来指定sheet名,但中文名会报UnicodeDecodeErro的错误
i = 1;# 作用于Excel表格第几行数与接口第几页
#写一个死循环让他一直爬取数据
while (True):
  import json# 这里这么引入json是因为不这么引入当循环到第二次就会报没有引入json的错,所以循环引入了
  #接口str(i)表示第几页一定要转为字符串格式,要不会报不是字符串的错
  url = "https://www.amap.com/service/poiInfo?query_type=TQUERY&pagesize=20&pagenum="+str(i)+"&qii=true&cluster_state=5&need_utd=true&utd_sceneid=1000&div=PC1000&addr_poi_merge=true&is_classify=true&zoom=14.81&city=110000&geoobj=115.7|39.4|117.4|41.6&keywords=水果店"  
  # 将cookies字符串组装为字典  
  cookies_str = "guid=f86f-79f2-5b0b-69a3; UM_distinctid=16386a114ca143-07312d6ae4d5af8-47534130-1fa400-16386a114ccb85; CNZZDATA1255626299=1778515027-1526967763-https%253A%252F%252Fwww.baidu.com%252F%7C1527219534; cna=5hWHEx7lRkECAXL4l+2LMAfU; isg=BGBg3rAqL6QOz5OkNN5wbxWiMm7ywUxc_zvQMtpxLHsO1QD_gnkUwzbHaf3V_vwL; _uab_collina=152697209566826431413694; key=bfe31f4e0fb231d29e1d3ce951e2c780" 
  cookies_dict = {}  
  for cookie in cookies_str.split(";"):  
      k, v = cookie.split("=", 1)  
      cookies_dict[k.strip()] = v.strip()  
  pass
  # 其他请求头参数  
  headers = {  
      'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0'  
  }

  # 让服务器认为你是通过浏览器访问页面 
  page = requests.get(url=url,cookies=cookies_dict,headers=headers);
  # 转json
  json = json.loads(page.text);
  # 判断这个字段如果为未找到相关信息则跳出死循环
  if json['data']['lqii']['change_query_tip'] == '未找到"水果店"相关结果':
    break;
  pass
  # 获取json长度用于添加Excel第几行
  length = len(json['data']['poi_list']);
  # 循环json数据向Excel表格添加
  for index,j in enumerate(json['data']['poi_list']):
    worksheet.write(index+(i-1)*length,0,j['disp_name'])
    worksheet.write(index+(i-1)*length,1,j['tel'])
    worksheet.write(index+(i-1)*length,2,j['address'])
  pass
  i+=1
pass
workbook.close()#最后关闭Excel表格 注意事项,当Excel表格正在打开的情况下会报没有关闭的错所以请关闭Excel再运行此程序

### 实现高德地图数据爬取 #### 准备工作 为了能够顺利地使用 Python 爬取高德 POI 数据,前期准备工作必不可少。首先需完成高德开放平台账号的创建并获得 API Key[^1]。 ```python import requests from urllib.parse import urlencode ``` 安装必要的库可以通过 Anaconda 或者 pip 来实现。对于本项目来说,`requests` 库用于发起 HTTP 请求是非常重要的工具之一。 #### 获取目标区域内的POI信息 通过构建 URL 并发送 GET 请求来获取指定条件下的地点兴趣点 (Point of Interest, POI) 列表。下面是一个简单的例子展示如何设置请求参数以及解析返回的数据: ```python def fetch_poi_data(city_name="青浦", keyword="医院"): base_url = "https://restapi.amap.com/v3/place/text?" params = { 'key': '您的API密钥', # 替换成自己的Key 'keywords': keyword, 'city': city_name, 'citylimit': True, 'output': 'json', 'extensions': 'all' } url = f"{base_url}{urlencode(params)}" response = requests.get(url).json() pois = [] if response['status'] == '1': for poi in response['pois']: item = { 'name': poi.get('name'), 'location': poi.get('location') } pois.append(item) return pois ``` 此函数接受城市名称和关键词作为输入参数,并返回符合条件的一系列 POI 的基本信息列表。注意这里的 `key` 参数应该替换为自己申请到的有效 API 密钥[^3]。 #### 处理分页查询结果 当一次请求无法取得全部记录时,可以利用页面翻页机制继续抓取剩余部分。通常情况下,API 提供了 `page` 和 `offset` 参数来进行控制。可以根据实际需求调整这些值以遍历整个数据集[^4]。 ```python for page_num in range(1, total_pages + 1): params.update({'page': str(page_num)}) current_page_results = fetch_poi_data(**params) all_results.extend(current_page_results) ``` 上述代码片段展示了如何循环读取多页的结果并将它们累积起来形成完整的数据集合。 #### 结果保存至本地文件 最后一步就是把收集好的数据存储下来以便后续分析处理。这里可以选择 JSON 文件格式方便日后加载回内存中操作。 ```python import json with open('poi_data.json', mode='w') as file: json.dump(all_results, file, ensure_ascii=False, indent=2) ``` 这样就完成了从准备环境到最后保存数据的整体流程介绍。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值