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

技术Python如何爬取北京市所有电子眼名Python如何爬取北京市所有电子眼名,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。前言今天给大家分享一篇非常

如何用Python抓取北京所有电子眼名称?针对这个问题,本文详细介绍了相应的分析和解决方法,希望能帮助更多想要解决这个问题的小伙伴找到更简单易行的方法。

今天给大家分享一篇很实用的文章,用树叶做一张北京交通电子眼分布图,再也不怕被隐蔽摄像头拍到了。

结果如下:

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

这个网站可以获取全国各地区的电子眼数据。

以北京为例,我们用python对北京所有的电子眼名称进行抓取。代码如下:

URL 1=' https://www . icauto.com.cn/张伟/wzd/110000/list_1.html '

response=requests.get(url1,headers=header)

soup=美化组(response.text,' html.parser ')

results=soup.find('div ',class _=' cdz-c content ')。查找全部(' li ')

forresultinresults:

时间.睡眠(0.5)

name=result.find('a ')。文本

索引=结果。查找(' span ')。文字。split (':') [1]经过包捕获分析,可以得到根据电子眼名称获取经纬度信息的界面:

https://api.map.baidu.com/?Qt=gcwd=北京西路中坝隧道段cn=北京IE=utf-8 oue=1 from product=jsapires=apiak=S8 ss5 dbz 7 blri 3 BCVRAAYMANQXOYEO返回结果如下:

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

大家主要看的是coord参数,但是乍一看确实有点混乱。我不知道这是什么。查了很久才知道这是百度地图使用的墨卡托平面坐标,使用百度地图api可以转换成经纬度。转换代码如下:

URL 3=' http://API . map . Baidu.com/geoconv/v1/?Coords={}from=6to=5ak=用你的ak替换。格式(str (coord ['x'])',' str (coord ['y']))。

response=requests.get(url3,headers=header)

result=JSON . loads(response . text)[' result '][0]

lon=结果['x']

Lat=结果['y']最后,将结果保存到csv表:

withopen('dianziyan.csv ',' a ',newline=' ',encoding='gb18030')asf:

f_csv=csv.writer(f)

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

2.用folium标点

叶图的标点方法之前已经介绍过,请参考:

用python生成广州停车场分布图。

代码如下:

importpandasaspd

data=PD . read _ CSV(' Dian ziyan . CSV ',编码='gbk ')

进口叶

fromfoliumimportplugins

camera _ map=leaf . map(位置=[数据['纬度'])。平均值(),数据['经度']。mean()],zoom_start=1。

0,control_scale=True,)
incidents = folium.map.FeatureGroup()
for name,row in data.iterrows():
    incidents.add_child(
        folium.CircleMarker(            #CircleMarker表示花圆
            [row["纬度"], row["经度"]],   #每个停车场的坐标
            radius=7,                   #圆圈半径
            color='yellow',             #标志的外圈颜色
            fill=True,                  #是否填充
            fill_color='red',           #填充颜色
            fill_opacity=0.4,            #填充透明度
            
        )
    )
Camera_map.add_child(incidents)
Camera_map.save('Camera_map1.html')

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

经过放大后可以发现,坐标定位不是很准,有的严重偏离路线,有的甚至定位到湖里了,这是因为底图坐标和电子眼经纬度标准不统一

为了定位更准确,我们把底图和电子眼经纬度统一规范为高德地图

百度经纬度转换成高德经纬度的函数如下:

import math
def bdToGaoDe(lat,lon):
    """
    百度经纬度转高德经纬度
    :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

读取数据,进行转换:

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

将底图换成高德地图,然后将标点转换成电子眼图标:

import folium
from folium import plugins
Camera_map = folium.Map(location=[data['纬度'].mean(), data['经度'].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 ='请点击我查看该点信息'
for name,row in data.iterrows():
    incidents.add_child(
        folium.Marker(            #CircleMarker表示花圆
            [bdToGaoDe(row["纬度"],row["经度"])[0],bdToGaoDe(row["纬度"],row["经度"])[1]],   #每个停车场的坐标
            icon=folium.Icon(color='green', prefix='fa', icon='bullseye')
        )
    )
Camera_map.add_child(incidents)
Camera_map.save('Camera_map2.html')

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

通过tiles可以设置不同的地图瓦片在,这里设置为高德地图瓦片

Folium.Icon类可以设置color, icon_color, icon, angle, prefix这5个参数:

color的可选项包括:[‘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网站中找到对应的名字,并设置prefix参数为’fa’
angle以度为单位设置

只显示了北京地区的电子眼位置,感兴趣的朋友可以深入研究一下,做一张全国的交通电子眼分布图。

关于Python如何爬取北京市所有电子眼名问题的解答就分享到这里了,希望

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/49014.html

(0)

相关推荐

  • 罗马数字0,在罗马数字中,零该怎么写

    技术罗马数字0,在罗马数字中,零该怎么写罗马数字起源于古罗马.一共有7个数字符:I,V,X,L,C,D,M
    相应的阿拉伯数字表示为:
    1,5,10,50,100,500,1000
    用罗马数字表示数时,如果几个相同的数字并

    生活 2021年10月26日
  • Linux下Tomcat怎样进行以非root用户执行特权操作

    技术Linux下Tomcat怎样进行以非root用户执行特权操作今天就跟大家聊聊有关Linux下Tomcat怎样进行以非root用户执行特权操作,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大

    攻略 2021年12月8日
  • 雅诗兰黛的眼霜,雅诗兰黛有什么好的眼霜

    技术雅诗兰黛的眼霜,雅诗兰黛有什么好的眼霜截止目前的话雅诗兰黛的眼霜,雅诗兰黛的眼霜我总共用过3款,这里讲一下我的使用感受。首先肤质声明:油痘肌肤,常年熬夜,眼下黑眼圈不严重,眼袋和水肿比较严重。1.雅诗兰黛抗蓝光眼霜

    生活 2021年10月30日
  • VSCode如何进行规范配置

    技术VSCode如何进行规范配置这篇文章主要介绍了VSCode如何进行规范配置,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。使用这些配置规范并格式化你的代

    攻略 2021年11月1日
  • mysql怎么看哪个是字段类型(mysql一个类型分成几个字段)

    技术MySQL字段类型分为哪几类这篇文章主要介绍“MySQL字段类型分为哪几类”,在日常操作中,相信很多人在MySQL字段类型分为哪几类问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MyS

    攻略 2021年12月25日
  • myeclipse如何快速重写方法(为什么myeclipse突然变得很慢了)

    技术如何进行MyEclipse优化速度方案的分析这篇文章给大家介绍如何进行MyEclipse优化速度方案的分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。MyEclipse优化速度方案的四大方面:

    攻略 2021年12月18日