最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用python爬取城市公交站點

 更新時間:2021年12月09日 15:47:47   作者:有我之境  
這篇文章主要介紹了利用Python爬蟲爬取城市公交站點的數(shù)據(jù),文中的代碼具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

利用python爬取城市公交站點

頁面分析

https://guiyang.8684.cn/line1

爬蟲

我們利用requests請求,利用BeautifulSoup來解析,獲取我們的站點數(shù)據(jù)。得到我們的公交站點以后,我們利用高德api來獲取站點的經(jīng)緯度坐標(biāo),利用pandas解析json文件。接下來開干,我推薦使用面向?qū)ο蟮姆椒▉韺懘a。

import requests
import json
from bs4 import BeautifulSoup
import pandas as pd
?
?
class bus_stop:
 ## 定義一個類,用來獲取每趟公交的站點名稱和經(jīng)緯度
 def __init__(self):
 self.url = 'https://guiyang.8684.cn/line{}'
 self.starnum = []
 for start_num in range(1, 17):
 self.starnum.append(start_num)
 self.payload = {}
 self.headers = {
 'Cookie': 'JSESSIONID=48304F9E8D55A9F2F8ACC14B7EC5A02D'}
 ## 調(diào)用高德api獲取公交線路的經(jīng)緯度
 ### 這個key大家可以自己去申請
 def get_location(self, line):
 url_api = 'https://restapi.amap.com/v3/bus/linename?s=rsv3&extensions=all&key=559bdffe35eec8c8f4dae959451d705c&output=json&city=貴陽&offset=2&keywords={}&platform=JS'.format(
 line)
 res = requests.get(url_api).text
 # print(res) 可以用于檢驗傳回的信息里面是否有自己需要的數(shù)據(jù)
 rt = json.loads(res)
 dicts = rt['buslines'][0]
 # 返回df對象
 df = pd.DataFrame.from_dict([dicts])
 return df
 ## 獲取每趟公交的站點名稱
 def get_line(self):
 for start in self.starnum:
 start = str(start)
 # 構(gòu)造url
 url = self.url.format(start)
 res = requests.request(
 "GET", url, headers=self.headers, data=self.payload)
 soup = BeautifulSoup(res.text, "lxml")
 div = soup.find('div', class_='list clearfix')
 lists = div.find_all('a')
 for item in lists:
 line = item.text  # 獲取a標(biāo)簽下的公交線路 
 lines.append(line)
 return lines
?
?
if __name__ == '__main__':
 bus_stop = bus_stop()
 stop_df = pd.DataFrame([])
 lines = []
 bus_stop.get_line()
 # 輸出路線
 print('一共有{}條公交路線'.format(len(lines)))
 print(lines)
 # 異常處理
 error_lines = []
 for line in lines:
 try:
 df = bus_stop.get_location(line)
 stop_df = pd.concat([stop_df, df], axis=0)
 except:
 error_lines.append(line)

 # 輸出異常的路線 
 print('異常路線有{}條公交路線'.format(len(error_lines))) 
 print(error_lines)

 # 輸出文件大小 
 print(stop_df.shape)
 stop_df.to_csv('bus_stop.csv', encoding='gbk', index=False)

數(shù)據(jù)清洗

我們先來看效果,我需要對busstops列進行清洗。我們的總體思路,分列->逆透視->分列。我會接受兩種方法,一是Excel PQ,二是python。

Excel PQ 數(shù)據(jù)清洗

這一方法完全利用PQ,純界面操作,問題不大,所以我們看看流程就可以了,核心步驟就是和上面一樣的。

python數(shù)據(jù)清洗

## 我們需要處理的busstops列和ID列
data = stop_df[['id','busstops']]
data.head()

## 字典或者列表分列
df_pol = data.copy()
### 設(shè)置索引列
df_pol.set_index('id',inplace=True)
df_pol.head()

## 逆透視
### 釋放索引
df_pol.reset_index(inplace=True)
### 逆透視操作
df_pol_ps = df_pol.melt(id_vars=['id'], value_name='busstops')
df_pol_ps.head()

## 刪除空行
df_pol_ps.dropna(inplace=True,axis=0)
df_pol_ps.shape?

## 分列
### 設(shè)置line_id
df_parse['line_id'] = df_pol_ps['id']
df_parse = df_pol_ps['busstops'].apply(pd.Series)
df_parse

我這里補充一下,我們一般還要對location列進行分列,把Long,lat分列出來,但是我們這里就不做了,都是重復(fù)勞動,而且我用的pq清洗,快很多。

## 寫入文件
df_parse.to_excel('貴陽市公交站點分布.xlsx', index=False)</pre> 

QGIS坐標(biāo)糾偏

QGIS基礎(chǔ)操作,我就不說了,順便說一下QGIS對csv格式支持較好,我推薦我們導(dǎo)入QGIS的文件為csv格式的文件。

導(dǎo)入csv文件

坐標(biāo)糾偏

以前說了很多,我們高德地圖上的坐標(biāo)是GCJ02坐標(biāo),我們需要轉(zhuǎn)成WGS 1984坐標(biāo),我們在QGIS里面需要借助GeoHey插件。

看一下這個坐標(biāo)糾偏,區(qū)別還是很大。

總結(jié)

總的來說,我們還是推薦使用使用面向?qū)ο蟮姆椒▉韺懘a,還有就是異常處理必不可少。我這次面對的問題是某些公交路線,高德API里面沒有,這樣就會異常,所以這次的異常處理不可缺少。從數(shù)據(jù)處理的角度來看,這次從速度和方便來說,pq完勝python,我推薦大家數(shù)據(jù)清洗就用pq,有些時候,我都會給出多種處理方法,pq看起來復(fù)雜,但是其實pq是最簡單的,總之,我高度推薦pq進行數(shù)據(jù)清洗。還有一點,python里面的索引比較麻煩,這次我要保證和bus_stop_id和line_id,這樣公交站點表和公交路線表才可以連接,其實這就是SQL里面的外鍵連接,所以我在python數(shù)據(jù)清洗的時候,涉及到大量的索引操作,在pq里面沒有這么復(fù)雜。說到這個索引,感謝我的SQL老師,當(dāng)年她講解SQL里面的索引,約束,仿佛就在昨天。高德的這個key大家可以自己去申請,這個key可能有數(shù)量的限制。我接下來會把代碼上傳到Gitee,這個代碼的管理還是很重要的,自己也學(xué)習(xí)一下代碼的管理。接下來,感謝小學(xué)妹給的這個小項目,也感謝崔工對我的鼓勵,其實,我最近很忙,不太想寫文章的。最后,感謝認(rèn)識的一個小學(xué)妹,她真的蠻優(yōu)秀的,最后希望大家2021年最后這一個月萬事如意,開開心心,也希望我們都有一個光明的未來。還有一個坑,我建議大家在簡書上寫文章,真的本地的話,圖片上傳有問題。

以上就是利用python爬取城市公交站點的詳細內(nèi)容,更多關(guān)于python爬取城市公交站點的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python利用re模塊實現(xiàn)簡易分詞(tokenization)

    Python利用re模塊實現(xiàn)簡易分詞(tokenization)

    分詞(tokenization)任務(wù)是Python字符串處理中最為常見任務(wù)了。本文將利用re模塊實現(xiàn)簡易tokenizer,文中的示例代碼講解詳細,需要的可以參考一下
    2022-04-04
  • Python實現(xiàn)批量執(zhí)行同目錄下的py文件方法

    Python實現(xiàn)批量執(zhí)行同目錄下的py文件方法

    今天小編就為大家分享一篇Python實現(xiàn)批量執(zhí)行同目錄下的py文件方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • python框架django中結(jié)合vue進行前后端分離

    python框架django中結(jié)合vue進行前后端分離

    本篇將基于Python+Django結(jié)合Vue.js前端框架,為大家介紹如何基于這三者的技術(shù)棧來實現(xiàn)一個前端后離的Web開發(fā)項目。文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Python?Pygame實戰(zhàn)之五款童年經(jīng)典游戲合集

    Python?Pygame實戰(zhàn)之五款童年經(jīng)典游戲合集

    本文為大家總結(jié)了五款利用Python+Pygame實現(xiàn)的童年經(jīng)典游戲:推箱子、滑雪、八分音符醬、保衛(wèi)蘿卜和飛機大戰(zhàn),快跟隨小編一起學(xué)習(xí)一下
    2022-04-04
  • python數(shù)據(jù)分析Numpy庫的常用操作

    python數(shù)據(jù)分析Numpy庫的常用操作

    numpy 是 Python 的一個科學(xué)計算的庫,提供了矩陣運算的功能,其一般與 Scipy、matplotlib 一起使用,這篇文章總結(jié)下python數(shù)據(jù)分析Numpy庫的常用操作,感興趣的朋友一起看看吧
    2022-01-01
  • python selenium 查找隱藏元素 自動播放視頻功能

    python selenium 查找隱藏元素 自動播放視頻功能

    這篇文章主要介紹了python selenium 查找隱藏元素 自動播放視頻功能,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07
  • python中dict獲取關(guān)鍵字與值的實現(xiàn)

    python中dict獲取關(guān)鍵字與值的實現(xiàn)

    這篇文章主要介紹了python中dict獲取關(guān)鍵字與值的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Python3 webservice接口測試代碼詳解

    Python3 webservice接口測試代碼詳解

    這篇文章主要介紹了Python3 webservice接口測試代碼詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • python基于C/S模式實現(xiàn)聊天室功能

    python基于C/S模式實現(xiàn)聊天室功能

    這篇文章主要為大家詳細介紹了python基于C/S模式實現(xiàn)聊天室功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 利用Python裁切tiff圖像且讀取tiff,shp文件的實例

    利用Python裁切tiff圖像且讀取tiff,shp文件的實例

    這篇文章主要介紹了利用Python裁切tiff圖像且讀取tiff,shp文件的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03

最新評論

鹿泉市| 固镇县| 麻阳| 三穗县| 海阳市| 遵化市| 漯河市| 巨野县| 潢川县| 枞阳县| 喀什市| 乐业县| 庄浪县| 秀山| 虎林市| 綦江县| 贡觉县| 布尔津县| 樟树市| 科技| 嘉义市| 酉阳| 庆安县| 德昌县| 那曲县| 富源县| 顺昌县| 宜城市| 丹寨县| 扬中市| 湟源县| 德格县| 长沙市| 右玉县| 扶沟县| 曲麻莱县| 宁陵县| 葵青区| 龙海市| 西和县| 万山特区|