”城市公交線路站點數據爬取 + csv站點數據轉ShapeFile矢量數據“(二)配置html頁面 以及 抓包json數據


(一)在高德上申請api開發Key,完了配置html頁面,我這里直接用了官方的demo頁。

<html>
<head>
    <script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=你的Key"></script> 
</head>

<body>
    <div id="container"></div>
    <script type="text/javascript">
        var map = new AMap.Map('container');
        /*
        var map = new AMap.Map('container', {
            zoom:11,//級別
            center: [116.397428, 39.90923],//中心點坐標
            viewMode:'3D'//使用3D視圖
        });
        */
    </script>
    <style type="text/css">
        #container {width:800px; height: 500px; }
    </style>
    <script type="text/javascript">
        AMap.plugin(["AMap.LineSearch"], function() {
            //實例化公交線路查詢類
            var linesearch = new AMap.LineSearch({
            pageIndex: 1, //頁碼,默認值為1
            pageSize: 1, //單頁顯示結果條數,默認值為20,最大值為50
            city: "北京", //限定查詢城市,可以是城市名(中文/中文全拼)、城市編碼,默認值為『全國』
            extensions: "all" //是否返回公交線路詳細信息,默認值為『base』
            });

            //執行公交路線關鍵字查詢
            linesearch.search('536', function(status, result) {
            //打印狀態信息status和結果信息result
            console.log(status, result);
            });
        });
    </script>>

</body>

</html>

(二)抓包,解析,並存儲為csv

這里需要把py文件和城市公交xlsx放在同一文件夾下。

import urllib
from urllib import request
import pandas as pd
import json
import time
import random

def extratStations(busListSlt):
    #keyName = busListSlt["key_name"]
    busName = busListSlt["name"]
    stationSet = []
    stations = busListSlt["busstops"]
    for bs in stations:
        tmp = []
        tmp.append(bs["id"])
        #tmp.append(keyName)
        tmp.append(busName)
        tmp.append(bs["name"])
        cor = bs["location"].split(",")
        tmp.append(cor[0])
        tmp.append(cor[1])
        stationSet.append(tmp)
    return stationSet


def writeStation(listData,fileName):
    data1 = pd.DataFrame(listData)
    data1.to_csv("E:\\公交線路\\江蘇省\\江蘇點總量\\{}".format(fileName),index=False,na_rep="NULL",header=["ID","BusName","StationName","LON","LAT"])


def main(cityName):
    df = pd.read_excel("{}.xlsx".format(cityName),header = None)
    BaseUrl = "https://restapi.amap.com/v3/bus/linename?s=rsv3&extensions=all&key=你弟Key&output=json&pageIndex=1&offset=1&"
    headers = {'User-Agent':"你弟UA"}
    
    busStations = []
    for bus in df[0]:
        params = {
            'city':cityName,
            'keywords':bus
        }
        print(bus)
        paramMerge = urllib.parse.urlencode(params) 
        targetUrl = BaseUrl + paramMerge
        #print(targetUrl)
        
        req = urllib.request.Request(url=targetUrl,headers=headers)
        res = urllib.request.urlopen(req)
        content = res.read()
        jsonData = json.loads(content)
        #print(jsonData)
        if (jsonData["buslines"]):
            busList = jsonData["buslines"]
            busListSlt = busList[0]
            
            busStations += extratStations(busListSlt)
            
            #time.sleep(random.random() * random.randint(0,7) + random.randint(0,5))
        else:
            continue
    
    writeStation(busStations, "{}點總量.csv".format(cityName))

listC = ["yancheng","yangzhou","zhenjiang"]#你弟城市公交csv
for i in listC:
    main(i)

最終結果如圖:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM