抓取高德地图位置信息及预览图片,生成excel文件小白教程

news/2024/12/21 18:51:22/

本人也是小白初学者,所以教程很小白,有不对的地方请指正,谢谢。

抓取步骤
1.申请高德地图API
2.新建excel文件
3.获取网页源代码
4.分析代码,找到需要抓取的内容位置特点,抓取内容
5.将抓取到的内容插入到文件中,并保存excel
6.抓取代码中的图片地址和图片,并保存
ps:防止抓取的内容缺失报错,用try跳出内容缺失部分

**1.申请高德地图API
2.新建excel文件
**

import xlwt	#导入excel模块
workbook_info=xlwt.Workbook()	#新建一个excel文件
sheet_info=workbook_info.add_sheet('info')	 #新建一个sheet并命名

3.获取网页源代码

import requests #导入用来获取网页模块
import json #导入用来获取网页中的json文件
city=["上海","江苏","浙江"]
for w in city:#keyword输入要抓取地址的关键字,city为城市(如果为单个城市的话,直接输入城市名,若要抓取多个城市,则用for循环,本例抓取多个城市)#offset为一页显示多少条记录,page为抓取页数,key是在高德开放平台申请的APIlink = "https://restapi.amap.com/v3/place/text?keywords=五金&city="+w+"&offset=20&page=1&key=(复制自己申请的API)" #设置User-Agent,伪装成浏览器进行访问,否则会403报错headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}#获取网页r = requests.get(link,headers=headers)#获取网页中的json文件decodejson = json.loads(r.text)print(decodejson)

4.分析代码,找到需要抓取的内容位置特点,抓取内容
根据上面代码导出的结果为:
在这里插入图片描述
我们需要获取的信息在"pois"下,"pois"为列表中多个字典格式,我们对"pois"下的内容进行索引,并获取内容,这步的思路主要是把每个地址索引到的信息转为列表,这样我们后面编辑到excel中直接索引这些列表就行了。
其中url中的地址为图片地址,稍后另外处理。

for i in decodejson['pois']:p=[] #新建一个空列表#分别用索引的方式获取内容pname=i['pname']  cityname=i['cityname']adname=i['adname']type1=i['type']name=i['name']address=i['address']#将每个索引到的内容插入到p空列表中p.append(pname)  p.append(cityname)p.append(adname)p.append(type1)p.append(name)p.append(address)   print(p)

上面代码的结果:
在这里插入图片描述
5.将抓取到的内容插入到文件中,并保存excel
在上面代码的基础上,我们对excel内容进行写入

   for num in range(0,6):sheet_info.write(m,num,label=p[num])  #在我们新建的sheet中第m行,第num列,插入上面p列表中的第num个索引值m+=1  #每循环一次加一
workbook_info.save(r'D:\info.xls')  #保存新建的workbook_info,存在D:\info.xls中,r是为了防止字符转译了
print(y)

这样我们获取的信息就已经生成excel表保存在电脑里了,可以按照保存路径查看哦

6.抓取代码中的图片地址和图片,并保存
接下来是将每个地址的图片下载下来,保存在文件夹里,为了后续能将图片直接对应导入excel中,因此我们以源文件的名字保存图片
在这里插入图片描述
思路:图片地址在photos列表中的字典里面,对pois索引photos后,获取url键的值

import urllib.request  #导入访问链接模块
import re  #导入正则模块
import os
for v in i["photos"]:for key,value in v.items():  #将字典中的键(url,provider,title)和值分别赋给key和value#如果键为我们要的url,则获取url的值if key=="url":                              url=value#判断该文件夹名是否存在,如果文件夹不存在,则新建文件夹,用来保存图片if os.path.isdir("D://test_pic") != True:os.makedirs("D://test_pic")#新建一个address.txt,用来写入每个urlwith open('address.txt','a') as f:  #a是每个循环打开address.txt时,接着往下写入urlf.write(url)    #写入urlf.write("\n")   #\n换行符#为了后续能将图片直接对应导入excel中,我们用正则表达式获取源文件的名字#(.*)为要获取的内容(表示匹配多个字符),每个url都有showpic/,因此表示为在url中匹配多个字符+showpic/+多个字符url_1=re.search(r'(.*)showpic/(.*)',url)  #由于存在部分链接是不为showpic/形式,因此我们要做一个判断,如果没有匹配到showpic/形式的链接,则图片名另外赋值为数字if url_1==None:pic=otherother+=1else:pic=url_1.group(2)  #若匹配正常,则获取第二个(.*)作为文件名#将图片保存为D://test_pic/{num}.jpg,num为上面用正则匹配到的字符urllib.request.urlretrieve(url22,"D://test_pic/{num1}.jpg".format(num1=pic)) f.close()  #将打开的文件关掉

这样图片就保存下来了

ps:防止抓取的内容缺失报错,用try跳出内容缺失部分
以获取电话为例,有些信息里面可能没有填写电话,这样代码运行到一半会报错,因此我们需要对电话信息进行处理,如果能抓取到电话则正常输出,如果抓取不到电话,则输出none

error=0  #设置一个变量
try:telephone1=i['tel']  #抓取电话信息
except:print('none')  #电话信息抓取不到,则输出noneerror=1   #并对变量赋值
if error==1:  #当变量变化时,说明电话抓取不到,则继续执行代码,不会报错continue

然后将抓取到的信息按上面的方法,插入到excel中,同样上面的图片也可以防止没有对应的图片地址报错,采用try的方法,对报错预先设置一个结果。

这样高德地图位置信息及图片抓取就都完成了,下面是完整代码:

import requests
import json
import xlwt
import os
import urllib.request
import re
city=["上海","江苏","浙江"]
workbook_info=xlwt.Workbook() 
sheet_info=workbook_info.add_sheet('info') 
other=0
m=0
for w in city:#keyword输入要抓取地址的关键字,city为城市(如果为单个城市的话,直接输入城市名,若要抓取多个城市,则用for循环,本例抓取多个城市)#offset为一页显示多少条记录,page为抓取页数,key是在高德开放平台申请的APIlink = "https://restapi.amap.com/v3/place/text?keywords=五金&city="+w+"&offset=20&page=1&key=192a0ac9aecac7c1eee7e9f9023e6a9d" #设置User-Agent,伪装成浏览器进行访问,否则会403报错headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}#获取网页r = requests.get(link,headers=headers)#获取网页中的json文件decodejson = json.loads(r.text)for i in decodejson['pois']:#分别用索引的方式获取内容pname=i['pname']cityname=i['cityname']adname=i['adname']type1=i['type']name=i['name']address=i['address']error=0  #设置一个变量try:telephone1=i['tel']    #抓取电话信息except:print('none')   #电话信息抓取不到,则输出noneerror=1   #并对变量赋值if error==1:  continue    #当变量变化时,说明电话抓取不到,则继续执行代码,不会报错for v in i["photos"]:error1=0#将字典中的键(url,provider,title)和值分别赋给key和value#如果键为我们要的url,则获取url的值try:for key,value in v.items():if key=="url":                              url=valueexcept:print("none1")error1=1if error1==1:continue   p=[]#将每个索引到的内容插入到p空列表中p.append(pname)p.append(cityname)p.append(adname)p.append(type1)p.append(name)p.append(address)p.append(telephone1)p.append(url)  for num in range(0,8):#在我们新建的sheet中第m行,第num列,插入上面p列表中的第num个索引值sheet_info.write(m,num,label=p[num])m+=1#为了后续能将图片直接对应导入excel中,我们用正则表达式获取源文件的名字#(.*)为要获取的内容(表示匹配多个字符),每个url都有showpic/,因此表示为在url中匹配多个字符+showpic/+多个字符url_1=re.search(r'(.*)showpic/(.*)',url)#由于存在部分链接是不为showpic/形式,因此我们要做一个判断,如果没有匹配到showpic/形式的链接,则图片名另外赋值为数字if url_1==None:pic=otherother+=1else:pic=url_1.group(2)  #若匹配正常,则获取第二个(.*)作为文件名#判断该文件夹名是否存在,如果文件夹不存在,则新建文件夹,用来保存图片if os.path.isdir("D://test_pic") != True:os.makedirs("D://test_pic")#新建一个address.txt,用来写入每个url#a是每个循环打开address.txt时,接着往下写入urlwith open('address.txt','a') as f:f.write(url)  #写入urlf.write("\n")  #\n换行符#将图片保存为D://test_pic/{num}.jpg,num为上面用正则匹配到的字符urllib.request.urlretrieve(url,"D://test_pic/{num1}.jpg".format(num1=pic))f.close()  #将打开的文件关掉
workbook_info.save(r'D:\info.xls')  #保存新建的workbook_info,存在D:\info.xls中,r是为了防止字符转译了

http://www.ppmy.cn/news/701135.html

相关文章

批量提取PDF和图片发票信息 2.2

人工录入发票信息真的好烦,有什么软件可以快速解决这个问题吗?​ 那天看到这个问题后,自己写了一个批量提取发票信息的小软件,打开软件之后,选择大量发票文件所在的文件夹就可以了,会自动把发票识别的结果…

免费物流跟踪轨迹订阅接口技术文档-快递鸟

物流跟踪由轨迹订阅接口和轨迹推送接口组成,对接时需要对接以下二个接口 1.轨迹订阅接口 1.1 功能说明 快递鸟物流轨迹订阅接口用于向快递鸟订阅物流轨迹信息。将订单内容通过订阅接口订阅到快递鸟,客户可自动获取运单的轨迹节点信息。 免费试用接口&…

Thinkphp企业级知宇自动发卡系统源码bug漏洞分析和修复

导读: 网上90%以上的自动发卡平台都是使用知宇自动发卡系统,这个系统功能强大、业务完善,是个很不错的程序。知宇自动发卡系统使用Thinkphp5.0内核开发的,是一个完全开源的项目,这套系统在网上早已泛滥,泛…

iText+freemarker 生成PDF 使用ftl模板

iTextfreemarker 生成PDF 生成样式图片模板地址mavenPDF生成工具类PDF生成辅助类base64编码工具类service方法调用总结 生成样式图片 模板地址 maven <!--PDF start--><dependency><groupId>org.xhtmlrenderer</groupId><artifactId>flying-sau…

Delphi处理高速文件上传下载的代码及思路

Delphi处理高速文件上传下载的代码及思路 上传和下载是一对方向不同的概念&#xff0c;下面对应的客户端和服务器代码&#xff1a;掉个头&#xff0c;它就是下载&#xff1b;再掉个头&#xff0c;它就是上传。 一、思路 1、将大文件&#xff1a;分段&#xff08;即常说的“断点…

昂**诚供应链管理系统任意文件上传漏洞复现 CNVD-2023-26756

目录 1.漏洞概述 2.影响版本 3.漏洞等级 4.漏洞复现 5.Nuclei自动化扫描POC 5.修复建议

511遇见易语言资源表的导入和导出

易语言资源表添加声音资源&#xff0c;图片资源&#xff0c;图片组资源&#xff0c;和向资源表中导入可执行文件&#xff0c;将资源表中的资源导出&#xff0c;使用资源表中的资源&#xff0c;通过随机播放音乐&#xff0c;随机播放图片&#xff0c;已经把exe文件写出并执行做了…

百度OCR识别表格文字,并自动下载到本地(准确率很高)

一、输入文件及申请的Token import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.util.List; import java.util.Map; import j…