精华内容
下载资源
问答
  • 前言本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。作者: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()

    展开全文
  • python爬取你想要的数据,近期由于业务需求,用python爬取了高德地图一些地点的数据,爬出来数据大致情况如下:image下面是基本流程:2.安装网络爬取第三方库,主要是下面三个(pip install 安装);from urllib.parse...

    python爬取你想要的数据,近期由于业务需求,用python爬取了高德地图一些地点的数据,爬出来数据大致情况如下:

    110993648

    image

    下面是基本流程:

    2.安装网络爬取第三方库,主要是下面三个(pip install 安装);

    from urllib.parse import **quote**

    from urllib import **request**

    import **json**

    3.创建网络爬虫爬取数据,并对数据进行解析(这块就直接上代码了);

    from urllib.parse import quote

    from urllib import request

    import json

    # import xlwt

    web_key = '**********' #自己高德的地图的key密钥

    url = "http://restapi.amap.com/v3/place/text"

    cityname = "南京" # 自己需要搜索城市

    classfiled = "汽车站" # 自己需要搜索的目的地信息(比如想搜索医院,直接替换成医院即可)

    i=0 # 爬取的页面信息,i=2时即爬取第2页的数据。当 result['count']=0 时即此页面已经无信息,爬取所有数据时可以用此终止循环

    req_url = **url** + "?key=" + **web_key** + '&extensions=all&keywords=' + quote(**classfiled**) + '&city=' + quote(**cityname**) + '&citylimit=true' + '&offset=25' + '&page=' + **str( i) **+ '&output=json'

    data = ''

    f=request.urlopen(req_url)

    data = f.read()

    data = data.decode('utf-8')

    result=json.loads(data)

    # print(result['count']) # 等于0时,即代表此页面已经无信息

    result['pois'][0] #显示数据记录格式

    处理过会,基本的网页信息就出来了

    110993648

    image

    以上的数据是以字典的形式打印出来的,把自己需要获取的字段提出出来就可以了:

    for i in range(len(result['pois'])):

    print('名称:',result['pois'][i]['name']

    ,'\n类型:',result['pois'][i]['type']

    ,'\n省份:',result['pois'][i]['pname']

    ,'\n城市:',result['pois'][i]['cityname']

    ,'\n地区:',result['pois'][i]['adname']

    ,'\n乡镇:',result['pois'][i]['business_area']

    ,'\n详细地址:',result['pois'][i]['address']

    ,'\n经纬度:',result['pois'][i]['location']

    ,'\n图片链接:',result['pois'][i]['photos'][0]['url']

    ,'\n'

    )

    部分数据结果如下:

    110993648

    image

    展开全文
  • 0 前言本文工具使用anaconda3.5+chrome一般爬虫分为非可视化爬虫和可视化爬虫。①非可视化爬虫:通过抓包获取...1 高德地图最近在研究高德地图小区边界经纬度坐标穿获取的问题,本来想先尝试使用requests,发现高德...

    0 前言

    本文工具使用anaconda3.5+chrome

    一般爬虫分为非可视化爬虫和可视化爬虫。

    ①非可视化爬虫:通过抓包获取数据接口,使用requests、urlib2、urlib3直接请求页面源码或异步加载的JSON数据。

    ②可视化爬虫:使用selenium工具模拟人为操作,获取页面源码解析数据。

    1 高德地图

    最近在研究高德地图小区边界经纬度坐标穿获取的问题,本来想先尝试使用requests,发现高德的反爬措施比一般网站都要严,单独通过非可视化爬虫请求基本上无法获取到想要的数据。

    抓包

    打开高德地图,在搜索框输入一个小区,如重庆大学B区,如下图所示。

    我们发现了是通过这个接口https://ditu.amap.com/detail/get/detail?id=B0017819Q6 GET方法获取到的异步JSON数据,有我们想要的经纬度坐标串。但是想要自动获取有两个前提条件,一是需要知道兴趣面的ID,如上面的重庆大学B区ID B0017819Q6;你可以尝试只请求上述连接,你会发现很快就会失效, 即使携带现有的cookie也不一定能请求成功。因此二是如何能保证高德地图能返回正常的数据。

    2 准备工作

    SELENIUM

    考虑到获取小区边界的事是一劳永逸,数据总量不大,可以降低请求频率。直接使用selenium工具模拟人为操作。

    ① 安装selenium

    #安装selenium

    pip install selenium

    ② 下载chromedriver

    ChromeDriver仓库下载对应的版本,chrome版本在浏览器network任一请求中请求头USER-AGENT中可以查看。

    然后将chromedriver.exe拷贝至anaconda安装目录下。

    browsermob-proxy

    BrowserMob Proxy,简称 BMP,它是一个 HTTP 代理服务,利用它我们可以截获 HTTP 请求和响应内容,另外还可以把 Performance data 输出成一个 HAR 文件。

    ① 下载地址,下载完后解压。

    ② browsermobproxy为Java开发的代理工具,因此还需要安装Java坏境,此处略过。

    3 DEMO

    代码

    import random

    import re

    import time

    from browsermobproxy import Server

    from selenium import webdriver

    from selenium.webdriver.chrome.options import Options

    server = Server(r'C:\Users\black\Downloads\browsermob-proxy-2.1.4-bin\browsermob-proxy-2.1.4\bin\browsermob-proxy.bat')

    server.start()

    proxy = server.create_proxy()

    chrome_options = Options()

    chrome_options.add_argument('--proxy-server={0}'.format(proxy.proxy)) # 加代理抓包

    chrome_options.add_argument('--ignore-certificate-errors') # 忽略无效证书的问题

    driver = webdriver.Chrome(chrome_options=chrome_options)

    base_url = 'https://www.amap.com/'

    proxy.new_har("amap", options={'captureHeaders': True, 'captureContent': True})

    driver.get(base_url)

    input = driver.find_element_by_id('searchipt') #获取输入框

    input.clear() #清空输入框

    input.send_keys("重庆大学B区") #输入关键词

    time.sleep(random.randint(2, 5))

    select = driver.find_elements_by_class_name("autocomplete-suggestion") #获取联想词框

    time.sleep(random.randint(2, 5))

    select[0].click() #点击出来的第一个联想词

    current_url = driver.current_url

    time.sleep(5)

    result = proxy.har

    print(result)

    hhh = re.findall('(\d{3}\.\d{6},\d{2}\.\d{6}_)', str(result)) #提取坐标串

    print(hhh)

    server.stop()

    driver.quit()

    打印出来的result如下图所示:

    通过第一张图片的坐标串在上述结果中搜索,发现只有一个坐标串,每个经纬度之间有“_”隔开。而且点状数据是不存在该形式坐标串的。

    解析的坐标串列表组合一下就OK了。

    说明

    ① 必须要添加chrome_options.add_argument('--ignore-certificate-errors') 参数,否则每请求一个网页,都会提示“您的链接不是私密链接”。

    ② 可以通过请求的url筛选出请求明细,用解析json的方式逐层获取坐标串,但这里选择用正则表达式去提取坐标串更为简单。

    4 总结

    爬虫这东西只要显示在浏览器上的东西基本都是可以抓取的(但是要注意尺度,不要给别人服务器太大压力),但是往往有非常的反爬措施,结合fiddler4这种代理抓包软件联想应该能找到一个直接将chrome浏览器所有的请求记录全部导出来的方法,可以解决几乎所有的数据获取问题。

    展开全文
  • 提起高德地图,咱们每一个人都不会陌生,高德地图是一款非常好用的...有很多用户都知道这款软件好用,那知道如何用我们python爬取高德地图吗?今天小编就为大家介绍一下。代码:importrequestsimportjsondefweatherl...

    提起高德地图,咱们每一个人都不会陌生,高德地图是一款非常好用的地区服务软件,很多用户在出行的时候都会使用这款软件,日程用来导航,也可以用来打车,一次呼叫多种车型,用户可以在这里获得更好的服务,随时都可以掌握的线上服务。有很多用户都知道这款软件好用,那知道如何用我们python爬取高德地图吗?今天小编就为大家介绍一下。

    代码:import requests

    import json

    def weatherlist(url1,url2,headers,proxies):

    response = requests.get(url=url1, headers=headers, proxies=proxies).content.decode('utf-8')

    response = json.loads(response)

    for i in response["data"]["cityByLetter"].values():

    for j in i:

    adcode = j["adcode"]

    name = j["name"]

    full_url = url2+adcode

    response = requests.get(url=full_url, headers=headers, proxies=proxies).content.decode('utf-8')

    response = json.loads(response)

    print(response)

    try:

    if response["data"]["data"]:

    for weather in response["data"]["data"]:

    for weather in weather['forecast_data']:

    weather_name = weather['weather_name']

    temp_min = weather['min_temp']

    temp_max = weather['max_temp']

    with open('weather_list.txt', 'a', encoding='utf-8') as fp:

    fp.write("城市:"+name+ " 天气: "+weather_name+" 最高气温: "+ temp_max

    +" 最低气温: "+temp_min+'\n')

    except:

    print('空')

    if __name__ == '__main__':

    url1 = 'https://www.amap.com/service/cityList'

    url2 = 'https://www.amap.com/service/weather?adcode='

    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36','Cookie':'BIDUPSID=F6BBCD59FE2A646812DB8DAE641A0BE5; PSTM=1573713375; BAIDUID=F6BBCD59FE2A6468D0329C1E2F60212F:FG=1; BD_UPN=12314353; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; H_PS_PSSID=1452_21098_29568_29221_26350; delPer=0; BD_CK_SAM=1; PSINO=2; H_PS_645EC=50d5uY51q2qJG%2BVlK7rlPmCgY73TcN9qKRz4sPKuBII1GIkIx4QkChitGd4; BDSVRTM=209'}

    proxies = {'http':'124.113.217.5:9999','https':''}

    weatherlist(url1,url2,headers,proxies)

    高德地图数据广泛、准确、及时,如果小伙伴正在学习爬虫,可以来爬取高德地图练练手哦~更多学习推荐:python学习网。

    展开全文
  • 0 前言本文工具使用anaconda3.5+chrome一般爬虫分为非可视化爬虫和可视化爬虫。①非可视化爬虫:通过抓包获取...1 高德地图最近在研究高德地图小区边界经纬度坐标穿获取的问题,本来想先尝试使用requests,发现高德...
  • 此次所讲的高德地图基本上可以解决我们的痛点,当然百度地图也可以哦。涉及知识主要是python爬去数据,俗称爬虫,设计到的函数库为request和beautifulsoup。当然我刚开始玩,所以可能多有不对...
  • 高德地图数据爬取1.爬取思路2.python核心代码二.Arcmap制图1.文本点生成shp代码2.Arcmap设置样式 一.高德地图数据爬取 1.爬取思路 首先,谷歌浏览器打开高德地图官网,点击上方菜单栏地铁进入地铁线路网站如下,点击...
  • 我的环境python2.7。运行后生产csv文件rent.cvs,内容为58同城品牌合租爬取的合租房源数据。使用火狐浏览器访问(谷歌浏览器加载csv时显示跨域问题)
  • 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。 很多已经做案例的人,却不知道如何去学习更加高深的知识。 那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,...
  • 将整个北京市网格化对每一个网格进行poi获取,当获取的数量过多时,对网格再次划分,递归查询第一步,爬取北京市边界坐标这里可以利用api来爬取,但为了方便,可以直接用高德地图的示例操作1.2 更改参数并运行1.3 在...
  • python爬虫爬取_高德地图_主要城市迁徙意愿排行榜_19年至今数据 还有一点:网站不提供具体人数,如果需要具体人数的话我有联通的2020年1-6月份的扩样后的具体人数数据 如需数据请加我qq,在我博客的其他文章里可以...
  • python_爬取高德地图某条公交线路_赠高德地图key 原创不易,转发请带本文链接 使用高德地图可以搜索单条公交线路,使用代码可以一次性爬取高德地图公交 赠送一个企业高德key,大部分高德的接口日访问量30万 88d2e276...
  • 在浏览器中搜索高德地图,按F12,点击搜索 可以查看到西安市对应的citycode是610100 cityList表示出城市信息,有可能有城市的编号,我们复制他的url查看 在json在线解析中可以解析出此文件,我们可以看到有一个...
  • 将整个北京市网格化对每一个网格进行poi获取,当获取的数量过多时,对网格再次划分,递归查询第一步,爬取北京市边界坐标这里可以利用api来爬取,但为了方便,可以直接用高德地图的示例操作1.2 更改参数并运行1.3 在...
  • 高德地图爬虫

    千次阅读 2019-02-27 11:11:13
    高德地图爬虫 工具:Pycharm,win10,Python3.6.4 1.需求分析 这篇爬虫和上一篇百度地图爬虫要求一样,百度地图爬虫我发现有一个auth参数会一直变化,一旦变化则获取的数据是不准确的,所以我上高德地图看了一下,...
  • [玛祖采集]python爬虫实践 采集高德地图上的位置 店铺信息 导出excel表格 一、环境OS:win10python:3.7 用到的库 from urllib.parse import quote from urllib import request import json import xlwt import sys ...
  • 认识高德地图API比起普通的静态网页爬虫,爬高德地图的麻烦之处在于API中存在参数。这需要我们首先要对高德地图API有个基本的了解。登录高德地图API网站,点击“开发文档”,找到下图中的“地理/逆地理编码API”处,...
  • 如果你想小白变大神,请学习我给你分享的资料,另外,想要获取Python免费资料,请关注公众号:“zhulin1028”;回复“python1"、“python2”、“python3”,即可免费获取。更有很多面试资料供你获取。 一、 分析网页...
  • 1、由于高德地图有20*45条poi的限制,所以每次能爬取45页,需要尽可能的缩小爬取范围,才能尽可能多的获取poi数据; 2、所以我们最应该考虑的问题是缩小范围,利用程序对城市内每一个区县行政区分别进行爬虫,以获取...
  • '"LINESTRING(%s)"' % new_coords lw.write(lwkt + '\n') def main(): cities = fetchAllCity(PAGE_URL, HEADER) print(cities) parseCityData(cities) if __name__ == '__main__': main() PS:如有需要Python学习...
  • CSDN有很多关于高德地图poi爬取的文章,python代码也是无数,真正能实现我们需要的功能的代码和文章却寥寥无几。本文将从高德地图api获取开始讲起,希望能帮助大家真正理解高德地图到底能为我们的工作和学习做些什么...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 124
精华内容 49
关键字:

高德地图python爬虫

python 订阅
爬虫 订阅