爬取讨论城市的富有公共交通和地铁线路名称,爬取探讨城市的持有公共交通和客车线路名称

  本篇博文为博主原创,转发请评释。

Python爬虫_城市公共交通、地铁站点和线路数量搜集实例,python爬虫

城市公共交通、地铁数量反映了都市的公交,商量该数量能够开掘城市的通畅结构、路网规划、公共交通选址等。不过,那类数据往往控制在一定部门中,很难获取。互连网地图上有大批量的音讯,包括公共交通、大巴等数据,解析其数额上报格局,能够经过Python爬虫采集。闲言少叙,接下去将详细介绍如何运用Python爬虫爬取城市公共交通、大巴站点和多少。

澳门永利网上娱乐,第3,爬取商量城市的装有公共交通和大巴线路名称,即XX路,大巴X号线。能够通过图吧公共交通、公共交通网、86捌四、本地宝等网址取得,该类网址提供了按数字和字母划分类别的公共交通线路名称。Python写个简单的爬虫就能采访,可参照WenWu_Both的文章,博主详细介绍了怎么运用python爬取868四上某城市具备的公共交通站点数据。该博主采集了站点详细的音信,包罗,可是贫乏了公共交通站点的坐标、公共交通线路坐标数据。那就令人抓狂了,未有空间坐标怎么落图,怎么分析,所以,本文重点介绍的是站点坐标、线路的拿走。

澳门永利网上娱乐 1

以图吧公共交通为例,点击某一公共交通后,出现该路公交的事无巨细站点消息和地图音讯。博主顿感欢喜,觉得即刻快要成功了,各样抓包,发现并无法分析。大概博主技术所限,如有大神能从中抓到站点和路线的坐标消息,请不宁赐教。那TM就让人彻底了呀,到嘴的肥肉吃不了。

澳门永利网上娱乐 2

天无绝人之路,尝试找找某地图的API,发现能够调用,通过分析,能够找到该数据的后台地址。熟稔前端的能够试试,博主前端也就只会个hello
world,不献丑了。这是壹种思路,实践注解是能够的。

澳门永利网上娱乐 3

地图API能够,那么通过地图抓包吗?打开某图主页,直接输入某市公共交通名称,通过抓包,成功找到站点和线路消息。具体抓包音信如下图所示,busline_list中详尽列出了站点和线路的新闻,当中有两条,是相同趟公共交通差异方向的数码,略互不相同,需注意。找到入口过后,接下去爬虫就要大显身手了。

澳门永利网上娱乐 4

要害爬取代码如下,其实也极粗略,主函数如下。首先需求创设传入的参数,主要的包罗路线名称,城市编码,地理范围,缩放尺度。地理范围能够透过坐标10取器获取,参数经url编码后,发送请求,判断重临数据是不是符合要求(注:大概该路线地图上停止运输或不设有,也说不定是访问速度过快,反爬虫机制亟待人工验证,博主爬取的时候遭逢过,所以后边设置了随机休眠)。接下来,正是解析json数据了。代码中的extratStations和extractLine,正是提取要求的字段,如何,是否很不难。最终,就是保存了,站点和路径分别存储。

def main():
 df = pd.read_excel("线路名称.xlsx",)
 BaseUrl = "https://ditu.amap.com/service/poiInfo?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&"
 for bus in df[u"线路"]:
 params = {
  'keywords':'11路',
  'zoom': '11',
  'city':'610100',
  'geoobj':'107.623|33.696|109.817|34.745'
 }
 print(bus)
 paramMerge = urllib.parse.urlencode(params) 
 #print(paramMerge)
 targetUrl = BaseUrl + paramMerge
 stationFile = "./busStation/" + bus + ".csv"
 lineFile = "./busLine/" + bus + ".csv"

 req = urllib.request.Request(targetUrl)
 res = urllib.request.urlopen(req)
 content = res.read()
 jsonData = json.loads(content)
 if (jsonData["data"]["message"]) and jsonData["data"]["busline_list"]:
  busList = jsonData["data"]["busline_list"] ##busline 列表
  busListSlt = busList[0] ## busList共包含两条线,方向不同的同一趟公交,任选一趟爬取

  busStations = extratStations(busListSlt)
  busLine = extractLine(busListSlt)
  writeStation(busStations, stationFile)
  writeLine(busLine, lineFile)

  sleep(random.random() * random.randint(0,7) + random.randint(0,5)) #设置随机休眠
 else:
  continue

附上海博物馆主的解析函数:

def extratStations(busListSlt):
 busName = busListSlt["name"]
 stationSet = []
 stations = busListSlt["stations"]
 for bs in stations:
 tmp = []
 tmp.append(bs["station_id"])
 tmp.append(busName)
 tmp.append(bs["name"])
 cor = bs["xy_coords"].split(";")
 tmp.append(cor[0])
 tmp.append(cor[1])
 wgs84cor1 = gcj02towgs84(float(cor[0]),float(cor[1]))
 tmp.append(wgs84cor1[0])
 tmp.append(wgs84cor1[1])
 stationSet.append(tmp)
 return stationSet

def extractLine(busListSlt):
 ## busList共包含两条线,备注名称
 keyName = busListSlt["key_name"]
 busName = busListSlt["name"] 
 fromName = busListSlt["front_name"]
 toName = busListSlt["terminal_name"]
 lineSet = []
 Xstr = busListSlt["xs"]
 Ystr = busListSlt["ys"]
 Xset = Xstr.split(",")
 Yset = Ystr.split(",")
 length = len(Xset)
 for i in range(length):
 tmp = []
 tmp.append(keyName)
 tmp.append(busName)
 tmp.append(fromName)
 tmp.append(toName)
 tmp.append(Xset[i])
 tmp.append(Yset[i])
 wgs84cor2 = gcj02towgs84(float(Xset[i]),float(Yset[i]))
 tmp.append(wgs84cor2[0])
 tmp.append(wgs84cor2[1])
 lineSet.append(tmp)
 return lineSet

爬虫采集原始数据如下:

澳门永利网上娱乐 5

以下是某一条公共交通站点和路线的拍卖后的数目呈现。由于不一致的地图商选拔区别的坐标系,会有差别水平的偏差,必要坐标纠正偏差或偏向。下一步,博主将详细介绍怎么着批量将这么些站点和坐标进行坐标改正和矢量化。

澳门永利网上娱乐 6

http://www.bkjia.com/Pythonjc/1294270.htmlwww.bkjia.comtruehttp://www.bkjia.com/Pythonjc/1294270.htmlTechArticlePython爬虫\_城市公交、地铁站点和线路数据采集实例,python爬虫
城市公共交通、大巴数量彰显了都市的公交,切磋该数额足以开掘城市的交…

  城市公共交通、地铁数量反映了都会的公交,讨论该数量能够挖掘城市的通行布局、路网规划、公交选址等。不过,那类数据往往控制在一定部门中,很难获得。互连网地图上有大量的音讯,包蕴公共交通、大巴等数码,解析其数量上报格局,能够经过Python爬虫采集。闲言少叙,接下去将详细介绍怎样使用Python爬虫爬取城市公共交通、大巴站点和数目。

  首先,爬取探究城市的具备公共交通和地铁线路名称,即XX路,客车X号线。能够通过图吧公共交通、公共交通网、86捌4、本地宝等网址取得,该类网址提供了按数字和字母划分连串的公共交通线路名称。Python写个简易的爬虫就能采访,可参考WenWu_Both的稿子,博主详细介绍了怎么行使python爬取86捌四上某城市有所的公共交通站点数据。该博主采集了站点详细的新闻,包罗,可是贫乏了公共交通站点的坐标、公共交通线路坐标数据。那就令人抓狂了,没有空间坐标怎么落图,怎么分析,所以,本文重点介绍的是站点坐标、线路的拿走。

澳门永利网上娱乐 7

  以图吧公共交通为例,点击某壹公共交通后,出现该路公共交通的详实站点音讯和地图新闻。博主顿感高兴,觉得马上快要成功了,各样抓包,发现并不能分析。只怕博主技术所限,如有大神能从中抓到站点和路线的坐标消息,请不宁赐教。那TM就令人绝望了呀,到嘴的肥肉吃不了。

澳门永利网上娱乐 8

  天无绝人之路,尝试找找某地图的API,发现能够调用,通过分析,能够找到该数据的后台地址。纯熟前端的能够试试,博主前端也就只会个hello
world,不献丑了。那是一种思路,实践申明是能够的。

澳门永利网上娱乐 9

  地图API能够,那么通过地图抓包吗?打开某图主页,直接输入某市公共交通名称,通过抓包,成功找到站点和线路音信。具体抓包消息如下图所示,busline_list中详尽列出了站点和线路的音讯,当中有两条,是相同趟公共交通不一样方向的数额,略迥然区别,需注意。找到入口过后,接下去爬虫就要大显身手了。

澳门永利网上娱乐 10

  主要爬取代码如下,其实也不会细小略,主函数如下。首先需求构建传入的参数,首要的包涵路线名称,城市编码,地理范围,缩放尺度。地理范围能够透过坐标十取器获取,参数经url编码后,发送请求,判断再次回到数据是或不是符合供给(注:大概该路线地图上停止运输或不设有,也说不定是访问速度过快,反爬虫机制亟待人工验证,博主爬取的时候碰着过,所此前边设置了随机休眠)。接下来,便是解析json数据了。代码中的extratStations和extractLine,正是提取须求的字段,怎么样,是或不是很简短。最后,正是保存了,站点和路径分别存款和储蓄。

 1 def main():
 2     df = pd.read_excel("线路名称.xlsx",)
 3     BaseUrl = "https://ditu.amap.com/service/poiInfo?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&"
 4     for bus in df[u"线路"]:
 5         params = {
 6             'keywords':'11路',
 7             'zoom': '11',
 8             'city':'610100',
 9             'geoobj':'107.623|33.696|109.817|34.745'
10         }
11         print(bus)
12         paramMerge = urllib.parse.urlencode(params) 
13         #print(paramMerge)
14         targetUrl = BaseUrl + paramMerge
15         stationFile = "./busStation/" + bus + ".csv"
16         lineFile = "./busLine/" + bus + ".csv"
17         
18         req = urllib.request.Request(targetUrl)
19         res = urllib.request.urlopen(req)
20         content = res.read()
21         jsonData = json.loads(content)
22         if (jsonData["data"]["message"]) and jsonData["data"]["busline_list"]:
23             busList = jsonData["data"]["busline_list"] ##busline 列表
24             busListSlt = busList[0] ## busList共包含两条线,方向不同的同一趟公交,任选一趟爬取
25             
26             busStations = extratStations(busListSlt)
27             busLine = extractLine(busListSlt)
28             writeStation(busStations, stationFile)
29             writeLine(busLine, lineFile)
30             
31             sleep(random.random() * random.randint(0,7) + random.randint(0,5)) #设置随机休眠
32         else:
33             continue

  附上海博物馆主的分析函数:

 1 def extratStations(busListSlt):
 2     busName = busListSlt["name"]
 3     stationSet = []
 4     stations = busListSlt["stations"]
 5     for bs in stations:
 6         tmp = []
 7         tmp.append(bs["station_id"])
 8         tmp.append(busName)
 9         tmp.append(bs["name"])
10         cor = bs["xy_coords"].split(";")
11         tmp.append(cor[0])
12         tmp.append(cor[1])
13         wgs84cor1 = gcj02towgs84(float(cor[0]),float(cor[1]))
14         tmp.append(wgs84cor1[0])
15         tmp.append(wgs84cor1[1])
16         stationSet.append(tmp)
17     return stationSet
18 
19 def extractLine(busListSlt):
20     ## busList共包含两条线,备注名称
21     keyName = busListSlt["key_name"]
22     busName = busListSlt["name"] 
23     fromName = busListSlt["front_name"]
24     toName = busListSlt["terminal_name"]
25     lineSet = []
26     Xstr = busListSlt["xs"]
27     Ystr = busListSlt["ys"]
28     Xset = Xstr.split(",")
29     Yset = Ystr.split(",")
30     length = len(Xset)
31     for i in range(length):
32         tmp = []
33         tmp.append(keyName)
34         tmp.append(busName)
35         tmp.append(fromName)
36         tmp.append(toName)
37         tmp.append(Xset[i])
38         tmp.append(Yset[i])
39         wgs84cor2 = gcj02towgs84(float(Xset[i]),float(Yset[i]))
40         tmp.append(wgs84cor2[0])
41         tmp.append(wgs84cor2[1])
42         lineSet.append(tmp)
43     return lineSet

  爬虫采集原始数据如下:

澳门永利网上娱乐 11

  以下是某一条公共交通站点和路线的处理后的数码显示。由于分化的地图商选拔区别的坐标系,会有两样程度的偏向,需求坐标纠正偏差或偏向。下一步,博主将详细介绍怎么样批量将那么些站点和坐标实行坐标改进和矢量化。

 澳门永利网上娱乐 12