精华内容
下载资源
问答
  • 高德地图数据爬取1.爬取思路2.python核心代码二.Arcmap制图1.文本点生成shp代码2.Arcmap设置样式 一.高德地图数据爬取 1.爬取思路 首先,谷歌浏览器打开高德地图官网,点击上方菜单栏地铁进入地铁线路网站如下,点击...

    一.高德地图数据爬取

    1.爬取思路

    首先,谷歌浏览器打开高德地图官网,点击上方菜单栏地铁进入地铁线路网站如下,点击进入官网
    在这里插入图片描述

    按F12或右击检查进入调试页面,点击Network选项。在网页上先点击西安,可以发现箭头2出新增两行响应信息,鼠标左击可以发现箭头3处出现真实的请求地址等信息。

    在这里插入图片描述

    复制请求URL地址(http://map.amap.com/service/subway?_1612234237437&srhdata=6101_drw_xian.json),在浏览器新页面打开可以看见返回的是json数据,里面包含了各线路站点信息,正是我们想要的。
    在这里插入图片描述

    可以复制json数据在json在线验证网站上进行分析,以便于后续解析数据(点击进入解析网站)。如下图所示,显示的是1号线沣河森林公园站的相关信息:中文名称、经纬度(应该是火星坐标系?)、拼音名称等。

    在这里插入图片描述

    我们通过python爬虫爬取各线路各站点的名称、经纬度信息,导出到文本文件,以供后续使用。

    2.python核心代码

    获取网页内容

    def getHtml(url):
        user_agent = random.choice(USER_AGENTS)
        headers = {
            "Host":"map.amap.com",
            'User-Agent': user_agent
        }
        try:
            response = requests.get(url, headers=headers)
            #print(response.url)
            text = response.content
            return text
        except:
            print("爬取失败!")
    

    解析json数据

    def parse_page(text):
        lines_list = json.loads(text).get('l')
        # 地铁线路信息表
        lineInfo_list = []
        for line in lines_list:
            #每条线的信息集合
            lineInfo = {}
            lineInfo['ln'] = line.get('ln')
            print(lineInfo['ln'])
    
            #线路站点列表
            station_list = []
            st_list = line.get('st')
            for st in st_list:
                station_dict = {}
                station_dict['name'] = st.get('n')
                coord = st.get('sl')
                station_dict['lat'] = coord.split(',')[0]
                station_dict['lon'] = coord.split(',')[-1]
                print("站名称:", station_dict['name'])
                print("经度:", station_dict['lat'])
                print("纬度:", station_dict['lon'])
                station_list.append(station_dict)
                #pass
            print('-----------------------------------')
            lineInfo['st'] = station_list
            lineInfo['kn'] = line.get('kn')
            lineInfo['ls'] = line.get('ls')
            lineInfo['cl'] = line.get('cl')
            lineInfo_list.append(lineInfo)
        #返回各线路信息列表
        return lineInfo_list
    

    保存站点数据(站名称、经纬度)

    def save_file(filename, lineInfo):
        #print("开始写入文件......")
        with open(filename, 'a', encoding='utf-8') as f:
            for st in lineInfo['st']:
                f.write(st['name'] + "  " + st['lat'] + "  " + st['lon'] + "\n")
        #print("写入文件完成!")
    

    爬取完成后,生成的数据如下:

    在这里插入图片描述

    二.Arcmap制图

    思路:调用Arcpy函数生成shp文件-——>点转线——>设置符号样式——>导出图片
    完整代码请点击
    如下图所示属于自己的地铁线路图就制作完成了。图片估计上传后就不是原图了,又会变模糊,但是实际看起来还是比较清楚的。
    在这里插入图片描述
    更多精彩内容,请关注我的微信公众号,期待与你共同进步!
    在这里插入图片描述

    展开全文
  • 前言本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。作者:Darcy频道# coding=utf-8import requestsimport timeimport jsonimport astimport...

    前言

    本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

    作者:Darcy频道

    # coding=utf-8

    import requests

    import time

    import json

    import ast

    import os

    import utils

    from lxml import etree

    PAGE_URL = 'http://map.amap.com/subway/index.html?&1100'

    DATA_URL = 'http://map.amap.com/service/subway?srhdata='

    HEADER = {

    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"}

    def fetchAllCity(url, header):

    r = requests.get(url, header)

    html = r.content

    element = etree.HTML(html)

    options = element.xpath("//a[contains(@class, 'city')]")

    cities = []

    for option in options:

    city = {

    'id': option.get('id'),

    'name': option.get('cityname'),

    'text': option.text

    }

    cities.append(city)

    return cities

    def parseCityData(citys):

    lw = open('./lwkt.txt', 'w')

    lw.write('wkt' + '\n')

    pw = open('./pwkt.txt', 'w')

    pw.write('wkt' + '\n')

    for city in citys:

    parseCityPointFromApi(city, lw, pw)

    def parseCityPointFromApi(city, lw, pw):

    url = DATA_URL + "{}_drw_{}.json".format(city['id'], city['name'])

    print(url)

    json_str = requests.get(url).text

    res = json.loads(json_str)

    res = res['l']

    for r in res:

    st = r['st']

    coords = []

    for s in st:

    _coords = s.get('sl', '').split(',')

    coords.append(_coords)

    pwkt = '"POINT ({} {})"'.format(_coords[0], _coords[1])

    pw.write(pwkt + '\n')

    new_coords = ','.join(['%s %s' % (coord[0], coord[1]) for coord in coords])

    lwkt = '"LINESTRING(%s)"' % new_coords

    lw.write(lwkt + '\n')

    def main():

    cities = fetchAllCity(PAGE_URL, HEADER)

    print(cities)

    parseCityData(cities)

    if __name__ == '__main__':

    main()

    展开全文
  • 高德地图爬虫

    千次阅读 2019-02-27 11:11:13
    高德地图爬虫 工具:Pycharm,win10,Python3.6.4 1.需求分析 这篇爬虫和上一篇百度地图爬虫要求一样,百度地图爬虫我发现有一个auth参数会一直变化,一旦变化则获取的数据是不准确的,所以我上高德地图看了一下,...

    高德地图爬虫

    工具:Pycharm,win10,Python3.6.4

    1.需求分析

    这篇爬虫和上一篇百度地图爬虫要求一样,百度地图爬虫我发现有一个auth参数会一直变化,一旦变化则获取的数据是不准确的,所以我上高德地图看了一下,高德地图没有这个反爬机制。但是高德地图大概爬取120个页面就会跳一次验证码,我这里是通过换IP解决这个问题的。

    2.数据准备

    同样我们需要全国地级市信息,用之前的数据即可

    3.爬虫思路

    首先打开高德地图搜索一个城市的养老院数量,看看需要的参数有哪些,已经我们要的信息在什么地方。

    按照这个步骤我们就能看到我们要的养老院数量就存放在这个位置,我们只需要获取该网页即可获取信息。网页参数如下

    红色方框即为我们需要的参数,有些参数可以省略,这个自行尝试。

    代码如下:

    import requests
    import json
    import xlwt
    from urllib.parse import urlencode
    import xlrd
    
    # 设置请求头,模拟浏览器访问
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
    }
    
    
    def get_page(keyword1, keyword2):
        try:
            data = {
                # 'wd': keyword1+keyword2,  # 修改关键字
                'query_type': 'TQUERY',
                'pagesize': '20',
                'pagenum': '1',
                'qii': 'true',
                'cluster_state': '5',
                'need_utd': 'true',
                'utd_sceneid': '1000',
                'div': 'PC1000',
                'addr_poi_merge': 'true',
                'is_classify': 'true',
                'zoom': '12',
                # 'city': '310000',
                # 'geoobj': '121.184146|31.118573|121.678531|31.212581',
                'keywords': keyword1 + keyword2,
            }
            # 把字典对象转化为url的请求参数
            url = 'https://www.amap.com/service/poiInfo?' + urlencode(data)
            # print(url)
            response = requests.get(url, headers=headers, timeout=60)
            response.encoding = 'utf-8'
            html = response.text
            # print(html)
            return html
        except:
            get_page(keyword1, keyword2)
    
    
    def parse_page(html):
        try:
            html = json.loads(html)
            # print(html)
            num = html['data']['total']
            # print(num)
            return num
        except:
            return '0'
    
    
    def write2excel(keywords1, nums, keyword2):
        book = xlwt.Workbook()
        sheet = book.add_sheet('sheet1')
        hang = 0
        for i in range(len(keywords1)):
            lie = 0
            sheet.write(hang, lie, keywords1[i])
            lie += 1
            sheet.write(hang, lie, str(nums[i]))
            hang += 1
        book.save(keyword2 + '.xls')
    
    
    def readExcel(filename):
        keywords = []
        # 打开文件
        wordbook = xlrd.open_workbook(filename)
        # 获取sheet4
        Sheet4 = wordbook.sheet_by_name('Sheet4')
        # 获取sheet4的第一列
        cols = Sheet4.col_values(0)
        for col in cols:
            keywords.append(col.strip())
        return keywords
    
    
    if __name__ == '__main__':
        keywords2 = ['养老院', '敬老院', '养老中心', '养老公寓']
        # keywords2 = ['养老院']
        for keyword2 in keywords2:
            nums = []
            keywords1 = readExcel('2.xls')
            # keywords1 = ['合肥市肥西县']
            for i in range(len(keywords1)):
                html = get_page(keywords1[i], keyword2)
                num = parse_page(html)
                nums.append(num)
                # print(type(nums[0]))
                print(keywords1[i], num)
    
            write2excel(keywords1, nums, keyword2)
    

     

    展开全文
  • 可爬取百度地图上公司、餐饮、医院、商家等信息并导出Excel,效果如图 1.前期准备 1.1下载安装python并配置环境 这里推荐两篇博客: [https://blog.csdn.net/qq_25814003/article/details/80609729]...

    声明:本文仅做技术交流,请勿用于商业用途!
    可爬取高德地图上各个城市公司、餐饮、医院、商家等信息并导出Excel,效果如图
    在这里插入图片描述

    1.前期准备

    1.1 下载安装python并配置环境

    这里推荐篇博客很详细:
    https://blog.csdn.net/qq_25814003/article/details/80609729

    1.2 下载安装PyCharm

    下载地址 :http://soft.onlinedown.net/soft/255225.htm
    安装教程:https://www.runoob.com/w3cnote/pycharm-windows-install.html

    1.3 获取高德地图POI的Key

    地址:https://lbs.amap.com/
    自己用来玩就开个人,条件允许整个企业的,区别在于个人一天2000次POI查询量,企业30万次查询量。
    控制台选择“
    应用管理”在这里插入图片描述
    创建应用在这里插入图片描述
    右上角为应用 添加Key,勾选web 服务在这里插入图片描述
    获取key
    在这里插入图片描述

    2.代码操作部分

    2.1代码

    打开PyCharm新建工程,新建代码 getpoi.py, 代码如下:

    # 高德地图:http://ditu.amap.com/
    # 高德地图poi:http://lbs.amap.com/api/webservice/guide/api/search/#text
    # 首先得申请一个下载poi数据的key,然后在对应位置填入你的key
    
    import json
    import xlwt
    from datetime import datetime
    from urllib import request
    from urllib.parse import quote
    import time
    import os
    
    
    # 获取数据
    def get_data(pageindex, url_amap):
        global total_record
        # 暂停500毫秒,防止过快取不到数据
        time.sleep(0.5)
        print('解析页码: ' + str(pageindex) + ' ... ...')
        url = url_amap.replace('pageindex', str(pageindex))
        # 中文编码
        url = quote(url, safe='/:?&=')
        html = ""
    
        with request.urlopen(url) as f:
            html = f.read()
            rr = json.loads(html)
            if total_record == 0:
                total_record = int(rr['count'])
            return rr['pois']
    
    
    def getPOIdata(page_size, json_name, url_amap):
        global total_record
        print('获取POI数据开始')
        josn_data = get_data(1, url_amap)
        if (total_record % page_size) != 0:
            page_number = int(total_record / page_size) + 2
        else:
            page_number = int(total_record / page_size) + 1
    
        with open(json_name, 'w') as f:
            # 去除最后]
            f.write(json.dumps(josn_data).rstrip(']'))
            for each_page in range(2, page_number):
                html = json.dumps(get_data(each_page, url_amap)).lstrip('[').rstrip(']')
                if html:
                    html = "," + html
                f.write(html)
                print('已保存到json文件:' + json_name)
            f.write(']')
        print('获取POI数据结束')
    
    # 写入数据到excel
    def write_data_to_excel(json_name, hkeys, bkeys, name):
        # 获取当前日期
        today = datetime.today()
        # 将获取到的datetime对象仅取日期
        today_date = datetime.date(today)
    
        # 从文件中读取数据
        fp = open(json_name, 'r')
        result = json.loads(fp.read())
        # 实例化一个Workbook()对象(即excel文件)
        wbk = xlwt.Workbook()
        # 新建一个名为Sheet1的excel sheet。此处的cell_overwrite_ok =True是为了能对同一个单元格重复操作。
        sheet = wbk.add_sheet('Sheet1', cell_overwrite_ok=True)
    
        # 创建表头
        # for循环访问并获取数组下标enumerate函数
        for index, hkey in enumerate(hkeys):
            sheet.write(0, index, hkey)
    
        # 遍历result中的每个元素。
        for i in range(len(result)):
            values = result[i]
            n = i + 1
            for index, key in enumerate(bkeys):
                val = ""
                # 判断是否存在属性key
                if key in values.keys():
                    val = values[key]
                sheet.write(n, index, val)
        wbk.save(name + str(today_date) + '.xls')
        print('保存到excel文件: ' + name + str(today_date) + '.xls!')
    
    
    if __name__ == '__main__':
        json_name = 'data_amap.json'
        os.makedirs('data_index')
        # 高德地图poi:http://lbs.amap.com/api/webservice/guide/api/search/#text
        # city = ["北京市","天津市","上海市","重庆市","河北省","山西省","辽宁省","吉林省","黑龙江","江苏省","浙江省",
        #        "安徽省","福建省","江西省","山东省","河南省","湖北省","湖南省","广东省","海南省","四川省","贵州省",
        #        "云南省","陕西省","甘肃省","青海省","台湾省","内蒙古自治区","广西壮族自治区","西藏自治区","宁夏回族自治区","新疆维吾尔自治区","香港特别行政区","澳门特别行政区"]
    
        # 解析city.json数据,读取城市列表
        city = []
        data = open("city.json", encoding="utf-8-sig")
        # 转换为python对象
        strJson = json.load(data)
        for i in range(len(strJson)):
            city.append(strJson[i]['n'])
        keyword = ["加油站"]
        # 关键词:"加油站","汽车销售","汽车维修","美食","购物","生活服务","体育休闲","医疗保健","宾馆酒店","风景",...等等
        # type具体可以查表http://lbs.amap.com/api/webservice/guide/api/search/#text
        # type = ["010000","020000","030000","050000","060000","070000","080000","090000","100000","110000","140000","150000","160000"]
        type = ["010000"]
    
        for i in range(0, len(city)):
         for j in range(0, len(keyword)):
           ##填入你的key
           url_amap = 'http://restapi.amap.com/v3/place/text?key=(复制你的key 此括号也删掉)&keywords=' + keyword[j] + '&types=' + type[
               j] + '&city=' + city[i] + '&citylimit=true&children=1&offset=20&page=pageindex&extensions=all'
           page_size = 25  # 每页记录数据,强烈建议不超过25,若超过25可能造成访问报错
           page_index = r'page=1'  # 显示页码
           global total_record
           total_record = 0
           # Excel表头
           hkeys = ['id', '行业类型', '名称', '类型', '地址', '联系电话', 'location', '省份代码', '省份名称', '城市代码', '城市名称', '区域代码', '区域名称',
                    '所在商圈']
           # 获取数据列
           bkeys = ['id', 'biz_type', 'name', 'type', 'address', 'tel', 'location', 'pcode', 'pname', 'citycode',
                    'cityname',
                    'adcode', 'adname', 'business_area']
           # 写入数据到json文件,第二次运行可注释
           getPOIdata(page_size, json_name, url_amap)
           # 读取json文件数据写入到excel
           # os.makedirs("data_index\\"+city[i])
           write_data_to_excel(json_name, hkeys, bkeys, "data_index\\" + city[i] + keyword[j] + "-高德地图")
           if (i % 13 == 0):
               time.sleep(45)
           elif (i % 13 != 0):
               time.sleep(15)
    

    2.2将json复制到项目文件夹下

    将文件下载解压到项目文件夹下和代码getpoi.py同一目录
    下载json地址:点击下载
    在这里插入图片描述

    2.3点击运行

    在这里插入图片描述
    结果如图
    在这里插入图片描述

    3.总结

    我这里是以加油站为例,如果想要查找其他类别,查找类别编码就行了,然后将type=【“你的类别”】
    在这里插入图片描述
    高德地图提供了各个类别编码文档
    下载地址:https://lbs.amap.com/api/webservice/download
    在这里插入图片描述
    此外还可以单独查询哪一个城市的数据,要不你自己先研究一哈…欢迎留言交流!

    这种方法可能存在不全的问题,大家可以试试这个 下载
    由于本人不是专业做大数据的,如有错误还望指正,Thanks!
    源码地址:
    https://github.com/DiogeDa/amap_poi_crawler

    展开全文
  • 1、由于高德地图有20*45条poi的限制,所以每次能爬取45页,需要尽可能的缩小爬取范围,才能尽可能多的获取poi数据; 2、所以我们最应该考虑的问题是缩小范围,利用程序对城市内每一个区县行政区分别进行爬虫,以获取...
  • python爬取高德地图全国农贸市场数据,自己写的,高德好像没有反爬的策略,我是没有遇到,按你们自己的需求改改就可以用了,基于python3哈
  • python爬取高德地图.zip

    2020-07-05 16:49:14
    Python爬取高德地图查询各城市天气。爬虫练习项目之一。从高德地图json数据接口获取天气,exe文件
  • 我的环境python2.7。运行后生产csv文件rent.cvs,内容为58同城品牌合租爬取的合租房源数据。使用火狐浏览器访问(谷歌浏览器加载csv时显示跨域问题)
  • [玛祖采集]python爬虫实践 采集高德地图上的位置 店铺信息 导出excel表格 一、环境OS:win10python:3.7 用到的库 from urllib.parse import quote from urllib import request import json import xlwt import sys ...
  • python_使用地址或公司名_爬虫爬取高德地图_百度地图_腾讯地图经纬度 import os import pandas as pd import urllib.parse import requests from utils.geolocataion_converting import gcj02_to_wgs84 ''' 此文件...
  • 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。 很多已经做案例的人,却不知道如何去学习更加高深的知识。 那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,...
  • 高德API按分类爬取POI,源自 人如墨,内容得自己改,亲测有用
  • python-rent 环境 Python 3.7.7 bs4 0.0.1 Beautiful Soup是一个可以从 HTML 或 XML 文件中提取数据的 Python 库。 lxml 4.5.2 lxml XML 工具箱是C库 libxml2 和 libxslt 的 Python 绑定。 安装bs4 安装 ...
  • python爬虫获取天气

    2020-12-22 10:08:52
    爬取天气 首先这串代码是我爬取天气网的相关信息,用到的有lxml和requests,用requests获取网页内容通过etree和xpath提取其中的相关信息,keyword是要输入的城市名字,可以随意修改目前已存在的城市,如果大家有什么...
  • 0 前言本文工具使用anaconda3.5+chrome一般爬虫分为非可视化爬虫和可视化爬虫。①非可视化爬虫:通过抓包获取...1 高德地图最近在研究高德地图小区边界经纬度坐标穿获取的问题,本来想先尝试使用requests,发现高德...
  • 将整个北京市网格化对每一个网格进行poi获取,当获取的数量过多时,对网格再次划分,递归查询第一步,爬取北京市边界坐标这里可以利用api来爬取,但为了方便,可以直接用高德地图的示例操作1.2 更改参数并运行1.3 在...
  • 提起高德地图,咱们每一个人都不会陌生,高德地图是一款非常好用的...有很多用户都知道这款软件好用,那知道如何用我们python爬取高德地图吗?今天小编就为大家介绍一下。代码:importrequestsimportjsondefweatherl...
  • 一、 分析网页结构 以往几篇都是介绍的传统的静态界面的爬取,这次博主介绍一个爬取动态网页的超简单的一个小demo。 说到动态网页,你对它了解多少呢? ...如果对动态网页不认识的童鞋,博主在此给出链接,可以看...
  • python requests爬取高德地图数据

    千次阅读 2018-06-04 12:38:00
    import requests #想要爬必须引 ...import xlsxwriter#操作Excel表格库 workbook = xlsxwriter.Workbook('E:/test/test.xlsx')# 新建的Excel表格文档路径 worksheet = workbook.add_worksheet() # 建立sheet, 可以...
  • 爬取了360手机助手百度地图高德地图用户评论,包括好评、中评和差评,具体方法移步:https://blog.csdn.net/qq_37089628/article/details/102567270
  • Python链家租房信息爬虫高德地图展示

    千次阅读 热门讨论 2019-04-15 12:19:50
    Python链家租房信息爬虫高德地图展示 工具:Pycharm,Win10,Python3.6.4,高德API 1.数据爬取 首先我们明确要获取的信息。我们要北京的东城,西城,朝阳,海淀,丰台这5个地区的租房信息。打开链家租房网站,...
  • 本文将从高德地图api获取开始讲起,希望能帮助大家真正理解高德地图到底能为我们的工作和学习做些什么,其次,本文从实例出发,为大家讲解利用高德地图给我们提供的poi编码和城市编码,通过python3.7和pyinstaller...
  • 在浏览器中搜索高德地图,按F12,点击搜索 可以查看到西安市对应的citycode是610100 cityList表示出城市信息,有可能有城市的编号,我们复制他的url查看 在json在线解析中可以解析出此文件,我们可以看到有一个...
  • 1.打开谷歌游览器,输入网址:高德地图 2.键盘按F12进入开发者调试模式,点击Network,选择XHR也就是js发起的异步加载请求获取的网页数据。这样有利于我们快速找到城市天气接口。 3.如上图所示,我们找到了这个叫...
  • 利用Python爬取高德地图数据

    千次阅读 2020-12-23 20:01:02
    高德开放平台注册账户https://lbs.amap.com/dev/index验证手机号码、邮箱后进入开发者后台创建一个应用:并为该应用添加 Key,服务平台选择 web 服务申请完毕后测试一下 Key 是否可用:替换掉下面 URL 的 Key 值...
  • 文章目录高德地图 API 的使用方式:代码部分 高德地图 API 的使用方式: 去高德地图的开放平台注册一个账号,并且创建自己的项目,系统会分配给你一个 key 值,这个具体如何操作可以去百度 在开发支持中选择 web...
  • python抓取高德POI数据,突破数据量限制,包含了python脚本程序和相关输入文件

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 970
精华内容 388
关键字:

高德地图python爬虫

python 订阅
爬虫 订阅