利用Python爬取8684公交路線查詢網站中全國公交站點信息

利用python語言結合requests、BeautifulSoup等類庫爬取https://api.8684.cn/v3/api.php?do=citys&act=province對應接口中所有城市公交路線信息以及公交站點信息。

import time
import requests
import json, re
from bs4 import BeautifulSoup# 定義一個函數,傳入線路名稱相當于在高德地圖搜索,來獲取每趟公交的站點名稱和經緯度
def get_city():""":rtype: object"""city_url = 'https://api.8684.cn/v3/api.php?do=citys&act=province'city_data = requests.get(city_url).textprint(city_data)city_res = json.loads(city_data)# print(city_res['stations'])for province in range(0, len(city_res['stations'])):for city in range(0, len(city_res['stations'][province]['childs'])):# print(city_res['stations'][province]['childs'][city])city_py = city_res['stations'][province]['childs'][city]['e']city_name = city_res['stations'][province]['childs'][city]['c']if city_name in ('廣州'):for k in range(1, 200):url = 'https://{}.8684.cn/line{}'.format(city_py, k)  # 今天就只先演示獲取一種線路類型下所有公交的信息,要想拿到整個城市的,其實就加個for循環:line1,line2,line3......# 偽裝請求頭headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36"}# 通過requests模塊模擬get請求res = requests.get(url=url, headers=headers)soup = BeautifulSoup(res.text, "lxml")div = soup.find('div', class_='list clearfix')if div is not None:lists = div.find_all('a')for item in lists:lines = item.text  # 獲取a標簽下的公交線路line = re.split(r' |\(', lines)[0]print(lines, "++++++++++++++++++++++++++++++++++",line )res_dir = 'E:\全國公交站點信息數據\\'url_api = 'https://restapi.amap.com/v3/bus/linename?s=rsv3&extensions=all&key=“替換高德創作平臺個人Key”&output=json&city={}&offset=2&keywords={}&platform=JS'.format(city_name, line)while requests.get(url_api).status_code != 200:print(url_api)res = requests.get(url_api).texttime.sleep(2)# print(res) #可以用于檢驗傳回的信息里面是否有自己需要的數據rt = json.loads(res)if 'buslines' in rt:if len(rt['buslines']) >= 1:for i in range(0, len(rt['buslines'])):line_id = rt['buslines'][i]['id']line_type = rt['buslines'][i]['type']line_name = rt['buslines'][i]['name']polyline = rt['buslines'][i]['polyline']city_code = rt['buslines'][i]['citycode']start_stop = rt['buslines'][i]['start_stop']end_stop = rt['buslines'][i]['end_stop']start_time = rt['buslines'][i]['start_time']end_time = rt['buslines'][i]['end_time']status = rt['buslines'][i]['status']company = rt['buslines'][i]['company']info = (str(line_id) + '\u0001' + str(line_type) + '\u0001' + str(line_name) + '\u0001' +str(polyline) + '\u0001' + str(city_code) + '\u0001' + str(start_stop) + '\u0001' +str(end_stop) + '\u0001' + str(start_time) + '\u0001' + str(end_time) + '\u0001'+ str(status) + '\u0001' + str(company))print(info)output_dir = res_dir + str(city_name) + '公交導航信息數據.txt'with open(output_dir, 'a', encoding="utf-8") as file:file.write(info + "\n")stop = rt['buslines'][i]['busstops']for j in range(len(stop)):station_id = stop[j]['id']station = stop[j]['name']location = stop[j]['location']sequence = stop[j]['sequence']info_ = (str(station_id) + '\u0001' + str(line) + '\u0001' + str(station) + '\u0001' +str(location) + '\u0001' + str(sequence))print(info_)output_dir = res_dir + str(city_name) + '公交站點信息數據.txt'with open(output_dir, 'a', encoding="utf-8") as file:file.write(info_ + "\n")j += 1else:passelse:passelse:print(url_api)res = requests.get(url_api).texttime.sleep(2)# print(res) #可以用于檢驗傳回的信息里面是否有自己需要的數據rt = json.loads(res)if 'buslines' in rt:if len(rt['buslines']) >= 1:for i in range(0, len(rt['buslines'])):line_id = rt['buslines'][i]['id']line_type = rt['buslines'][i]['type']line_name = rt['buslines'][i]['name']polyline = rt['buslines'][i]['polyline']city_code = rt['buslines'][i]['citycode']start_stop = rt['buslines'][i]['start_stop']end_stop = rt['buslines'][i]['end_stop']start_time = rt['buslines'][i]['start_time']end_time = rt['buslines'][i]['end_time']status = rt['buslines'][i]['status']company = rt['buslines'][i]['company']info = (str(line_id) + '\u0001' + str(line_type) + '\u0001' + str(line_name) + '\u0001' +str(polyline) + '\u0001' + str(city_code) + '\u0001' + str(start_stop) + '\u0001' +str(end_stop) + '\u0001' + str(start_time) + '\u0001' + str(end_time) + '\u0001'+ str(status) + '\u0001' + str(company))print(info)output_dir = res_dir + str(city_name) + '公交導航信息數據.txt'with open(output_dir, 'a', encoding="utf-8") as file:file.write(info + "\n")stop = rt['buslines'][i]['busstops']for j in range(len(stop)):station_id = stop[j]['id']station = stop[j]['name']location = stop[j]['location']sequence = stop[j]['sequence']info_ = (str(station_id) + '\u0001' + str(line) + '\u0001' + str(station) + '\u0001' +str(location) + '\u0001' + str(sequence))print(info_)output_dir = res_dir + str(city_name) + '公交站點信息數據.txt'with open(output_dir, 'a', encoding="utf-8") as file:file.write(info_ + "\n")j += 1else:passelse:passelse:passelse:passif __name__ == '__main__':result = get_city()

在結合文件寫入等操作將采集到的站點信息以及導航信息保存至對應城市的文件中

數據樣例展示, 分隔符為

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/719812.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/719812.shtml
英文地址,請注明出處:http://en.pswp.cn/news/719812.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

“祖傳代碼“的是是非非

程序員眼中的“祖傳代碼”,就像一本古老而神秘的魔法書,藏著無窮的智慧和技巧,有些代碼像家傳寶貝,有些像祖傳秘方。快來分享一下你遇到的“祖傳代碼”吧~ 祖傳代碼的歷史與文化價值 祖傳代碼通常指的是經過長時間使用和傳承的代…

【DUSt3R】2張圖2秒鐘3D重建

【DUSt3R】2張圖2秒鐘3D重建 1. DUSt3R是一種用于稠密和無約束立體三維重建的方法,其實現步驟如下:2. 實際運行效果3. 運行結果4. 自問自答4.1 為社么這里要是使用transform模型呢?4.2 CroCo(通過跨視圖完成3D視覺任務的自我監督預訓練的一個研究)在DUSt3R的作用是什么,為…

打家劫舍(java版)

📑前言 本文主要是【動態規劃】——打家劫舍(java版)的文章,如果有什么需要改進的地方還請大佬指出?? 🎬作者簡介:大家好,我是聽風與他🥇 ??博客首頁:CSDN主頁聽風與他 🌄每日一…

17 easy 290. 單詞規律

//給定一種規律 pattern 和一個字符串 s ,判斷 s 是否遵循相同的規律。 // // 這里的 遵循 指完全匹配,例如, pattern 里的每個字母和字符串 s 中的每個非空單詞之間存在著雙向連接的對應規律。 // // // // 示例1: // // //輸入: patte…

24計算機考研調劑 | 西安工大

西安工大 考研調劑招生信息 學校:西安工大 專業:- 年級:2024 招生人數:4 招生狀態:正在招生中 聯系方式:********* (為保護個人隱私,聯系方式僅限APP查看) 補充內容 歡迎化工、材料、環工等專業[或有計算機相關專業(智能科學和軟件工程方向)、機…

一款不錯的多端SSH工具:Xterminal

1、不僅是強大的SSH工具,更提供本地控制臺,以及更多即將推出的開發相關功能,讓您專注于創造卓越的代碼 2、AI賦能,智能命令提示,為大腦解壓 AI解答,讓你的疑問得到即時解答 AI智能提示,讓每一…

CodeFlying 和 aixcoder兩大免費軟開平臺,孰強孰弱?

今天為大家帶來碼上飛CodeFlying和aixcoder兩款免費的軟件開發平臺效果的測評 一、產品介紹 首先簡單介紹一下這兩個平臺 碼上飛CodeFlying:碼上飛 CodeFlying | AI 智能軟件開發平臺! 是一款革命性的軟件開發平臺,它通過將軟件工程和大模…

Redis是AP的還是CP的?

redis是一個開源的內存數據庫,那么他到底是AP的還是CP的呢? 有人說:單機的是redis是cp的,而集群的redis是ap的? 但是我不這么認為,我覺得redis就是ap的,雖然在單機redis中,因為只有…

Git 基本操作 ?作區、暫存區、版本庫

創建本地倉庫: 創建 Git 本地倉庫 要提前說的是,倉庫是進行版本控制的?個文件目錄。我們要想對文件進行版本控制,就必須先創建?個倉庫出來。 首先touch 一個文件: 初始化倉庫: 創建完成后,我們會發現當前…

行列式錯題本

《1800》 1 階數和轉置 A是三階,B是4階,還有2這個系數 2 怎么啥也不會呀,委屈 行列式的拆分+提取系數 3

uniapp 安裝安卓、IOS模擬器并調試

一、安裝Android模擬器并調試 1.下載并安裝Android Studio。 2.創建簡單project。 3.安裝模擬器。 完成安卓模擬器的安裝。 4.啟動模擬器。 5.hbuilderx選擇模擬器、運行。 點擊刷新按鈕后出現模擬器,勾選并運行。 6.調試。 在 HBuilderX 中,項目啟…

每天一道leetcode:20.有效的括號(簡單;棧的經典題目)

?今日份題目 給定一個只包括 (,),{,},[,] 的字符串 s ,判斷字符串是否有效。 有效字符串需滿足: 左括號必須用相同類型的右括號閉合。 左括號必須以正確的順序閉合。 每個右括號都有一個對…

Nano 33 BLE Sense Rev2學習第一節——環境配置

參考文檔見Access Barometric Pressure Sensor Data on Nano 33 BLE Sense | Arduino Documentation 打開Arduino ide安裝開發板 選擇開發板 連接開發板到電腦,自動識別開發板端口,選擇端口

Python-類型檢查:typing模塊和mypy工具

Python-類型檢查&#xff1a;typing模塊和mypy工具 >>返回Python系列文章目錄<< 文章鏈接: Python中typing模塊 文章鏈接: PyCharm集成類型檢查mypy

ssh 一次執行多條命令(后臺運行)

文章目錄 1. 背景2. 命令2.1 命令分隔符2.2 多行腳本2.3 單行腳本 3. SSH 任務后臺運行 1. 背景 有時我們只需要遠程執行一次任務然后就關閉&#xff0c;而不需要長時間 ssh 登錄到遠程服務器。同時一次任務可能需要執行多條命令&#xff0c;那么我們該如何做呢&#xff1f; …

【Java】查看class文件的jdk編譯版本的兩種方式

一、使用文本編輯工具EditPlus 使用EditPlus打開該class文件&#xff0c;字符集選擇16進制&#xff08;Hex viewer&#xff09;。 僅看第一行數據&#xff0c;前面8個字節CA FE BA BE是固定的。 之后4個字節00 00 是次版本。 次版本后面的4個字節00 34 就是jdk版本。 jdk版本…

torch中的sort用法|torch.sort

今天在學習代碼時&#xff0c;發現有些深度學習的項目中使用到torch.sort()函數&#xff0c;在此記錄一下&#xff0c;方便自己的查閱. torch.sort() 官網給出了非常詳細的介紹&#xff0c;但是為了更進一步掌握這一用法&#xff0c;在此記錄一下。 具體官網鏈接如下&#xf…

華為認證HCIP報名條件有哪些?考試要求介紹

華為HCIP認證是很多網絡工程師的考證首選&#xff0c;尤其對于剛入行不久的網絡工程師們來說&#xff0c;這個證書無論是從難度出發還是從含金量出發&#xff0c;都是值得一考的。 那么如果想報名華為HCIP認證有哪些條件以及考試要求&#xff0c;華為HCIP的報名需不需要通過機…

鏡頭畸變模型及去畸變的原理

1. OpenCV去畸變undistortPoints原理解析 Opencv中鏡頭畸變包含了徑向畸變和切向畸變&#xff0c;本章節主要闡述鏡頭畸變模型以及去畸變的原理。 1.1 鏡頭畸變模型 參考opencv文檔 https://docs.opencv.org/3.1.0/d4/d94/tutorial_camera_calibration.html&#xff0c;opencv…

基于SpringBoot+MYSQL的醫護人員排班系統

基于springboot的醫護人員排班系統錄像 1、 前言介紹 隨著信息技術在管理上越來越深入而廣泛的應用&#xff0c;管理信息系統的實施在技術上已逐步成熟。本文介紹了醫護人員排班系統的開發全過程。通過分析醫護人員排班系統管理的不足&#xff0c;創建了一個計算機管理醫護人員…