Python如何爬取北京市所有電子眼名

Python如何爬取北京市所有電子眼名,針對這個(gè)問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。

創(chuàng)新互聯(lián)建站專注于網(wǎng)站建設(shè),為客戶提供網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)開發(fā)服務(wù),多年建網(wǎng)站服務(wù)經(jīng)驗(yàn),各類網(wǎng)站都可以開發(fā),高端網(wǎng)站設(shè)計(jì),公司官網(wǎng),公司展示網(wǎng)站,網(wǎng)站設(shè)計(jì),建網(wǎng)站費(fèi)用,建網(wǎng)站多少錢,價(jià)格優(yōu)惠,收費(fèi)合理。

前言

今天給大家分享一篇非常實(shí)用的文章,用folium制作北京市交通電子眼分布地圖,再也不怕被隱藏?cái)z像頭偷拍了

成果圖如下:

Python如何爬取北京市所有電子眼名

此網(wǎng)站可以獲取全國各地區(qū)的電子眼數(shù)據(jù)

我們以北京市為例,用python爬取北京市所有電子眼名稱,代碼如下:

url1='https://www.icauto.com.cn/weizhang/wzd/110000/list_1.html'
response=requests.get(url1,headers=header)
soup=BeautifulSoup(response.text,'html.parser')
results=soup.find('div',class_='cdz-ccotent').find_all('li')
for result in results:
    time.sleep(0.5)
    name=result.find('a').text
    index=result.find('span').text.split(':')[1]

經(jīng)過抓包分析,可以得到根據(jù)電子眼名稱獲取經(jīng)緯度信息的接口:

https://api.map.baidu.com/?qt=gc&wd=北京西路中壩隧道路段&cn=北京&ie=utf-8&oue=1&fromproduct=jsapi&res=api&ak=s8sS5dBsZ7bLRi3bcVRAaYMAnqlXoyeo

返回結(jié)果為:

大家主要看coord參數(shù),剛一看確實(shí)有點(diǎn)懵逼,不知道這是啥玩意,我查了半天,才知道這種是百度地圖采用的墨卡托平面坐標(biāo),利用百度地圖api可以轉(zhuǎn)化成經(jīng)緯度,轉(zhuǎn)化代碼如下:

 url3='http://api.map.baidu.com/geoconv/v1/?coords={}&from=6&to=5&ak=換成你的ak'.format(str(coord['x'])+','+str(coord['y']))
response=requests.get(url3,headers=header)
result=json.loads(response.text)['result'][0]
lon=result['x']
lat=result['y']

最后將結(jié)果保存到csv表格中:

with open('dianziyan.csv', 'a+', newline='', encoding='gb18030') as f:
    f_csv = csv.writer(f)
    f_csv.writerow([name, index, lon,lat])

Python如何爬取北京市所有電子眼名

2.用folium標(biāo)點(diǎn)

folium地圖標(biāo)點(diǎn)的方法之前已經(jīng)有介紹了,可以參考:

python生成廣州全市停車場分布地圖

代碼如下:

import pandas as pd
data=pd.read_csv('dianziyan.csv',encoding='gbk')
import folium
from folium import plugins
Camera_map = folium.Map(location=[data['緯度'].mean(), data['經(jīng)度'].mean()], zoom_start=10,control_scale=True,)
incidents = folium.map.FeatureGroup()
for name,row in data.iterrows():
    incidents.add_child(
        folium.CircleMarker(            #CircleMarker表示花圓
            [row["緯度"], row["經(jīng)度"]],   #每個(gè)停車場的坐標(biāo)
            radius=7,                   #圓圈半徑
            color='yellow',             #標(biāo)志的外圈顏色
            fill=True,                  #是否填充
            fill_color='red',           #填充顏色
            fill_opacity=0.4,            #填充透明度
            
        )
    )

Camera_map.add_child(incidents)
Camera_map.save('Camera_map1.html')

經(jīng)過放大后可以發(fā)現(xiàn),坐標(biāo)定位不是很準(zhǔn),有的嚴(yán)重偏離路線,有的甚至定位到湖里了,這是因?yàn)榈讏D坐標(biāo)和電子眼經(jīng)緯度標(biāo)準(zhǔn)不統(tǒng)一

為了定位更準(zhǔn)確,我們把底圖和電子眼經(jīng)緯度統(tǒng)一規(guī)范為高德地圖

百度經(jīng)緯度轉(zhuǎn)換成高德經(jīng)緯度的函數(shù)如下:

import math
def bdToGaoDe(lat,lon):
    """
    百度經(jīng)緯度轉(zhuǎn)高德經(jīng)緯度
    :param lon:
    :param lat:
    :return:
    """
    PI = 3.14159265358979324 * 3000.0 / 180.0
    x = lon - 0.0065
    y = lat - 0.006
    z = math.sqrt(x * x + y * y) - 0.00002 * math.sin(y * PI)
    theta = math.atan2(y, x) - 0.000003 * math.cos(x * PI)
    lon = z * math.cos(theta)
    lat = z * math.sin(theta)
    return lat,lon

讀取數(shù)據(jù),進(jìn)行轉(zhuǎn)換:

import pandas as pd
data=pd.read_csv('dianziyan.csv',encoding='gbk')
for name,row in data.iterrows():
    print(bdToGaoDe(row["緯度"],row["經(jīng)度"]))

將底圖換成高德地圖,然后將標(biāo)點(diǎn)轉(zhuǎn)換成電子眼圖標(biāo):

import folium
from folium import plugins
Camera_map = folium.Map(location=[data['緯度'].mean(), data['經(jīng)度'].mean()], zoom_start=10,zoom_control='False',
                     tiles='http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}',attr='AutoNavi')
incidents = folium.map.FeatureGroup()
tooltip ='請點(diǎn)擊我查看該點(diǎn)信息'
for name,row in data.iterrows():
    incidents.add_child(
        folium.Marker(            #CircleMarker表示花圓
            [bdToGaoDe(row["緯度"],row["經(jīng)度"])[0],bdToGaoDe(row["緯度"],row["經(jīng)度"])[1]],   #每個(gè)停車場的坐標(biāo)
            icon=folium.Icon(color='green', prefix='fa', icon='bullseye')
        )
    )

Camera_map.add_child(incidents)
Camera_map.save('Camera_map2.html')

Python如何爬取北京市所有電子眼名

通過tiles可以設(shè)置不同的地圖瓦片在,這里設(shè)置為高德地圖瓦片

Folium.Icon類可以設(shè)置color, icon_color, icon, angle, prefix這5個(gè)參數(shù):

color的可選項(xiàng)包括:[‘red’, ‘blue’, ‘green’, ‘purple’, ‘orange’, ‘darkred’, ‘lightred’, ‘beige’, ‘darkblue’, ‘darkgreen’, ‘cadetblue’, ‘darkpurple’, ‘white’, ‘pink’, ‘lightblue’, ‘lightgreen’, ‘gray’, ‘black’, ‘lightgray’] ,或者HTML顏色代碼
icon_color同上
icon可以在Font-Awesome網(wǎng)站中找到對應(yīng)的名字,并設(shè)置prefix參數(shù)為’fa’
angle以度為單位設(shè)置

只顯示了北京地區(qū)的電子眼位置,感興趣的朋友可以深入研究一下,做一張全國的交通電子眼分布圖。

關(guān)于Python如何爬取北京市所有電子眼名問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。

當(dāng)前名稱:Python如何爬取北京市所有電子眼名
本文地址:http://www.muchs.cn/article44/gehshe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動(dòng)態(tài)網(wǎng)站、品牌網(wǎng)站建設(shè)、網(wǎng)站導(dǎo)航、云服務(wù)器電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作