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)

相关推荐

  • Hibernate SessionFactory是什么

    技术Hibernate SessionFactory是什么这篇文章主要介绍Hibernate SessionFactory是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!SessionFact

    攻略 2021年12月8日
  • 设计模式,三)建造者模式

    技术设计模式,三)建造者模式 设计模式(三)建造者模式建造者模式建造者模式也属于创建模式,它提供了一种创建对象的最佳方式。
    定义:将一个复杂的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

    礼包 2021年11月25日
  • python计算变量间的相关系数(python计算多元变量的相关系数)

    技术Python协方差与相关系数怎么定义本篇内容介绍了“Python协方差与相关系数怎么定义”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅

    攻略 2021年12月21日
  • LibraBFT和Bystack BBFT有什么区别?

    技术LibraBFT与比原链Bystack BBFT有什么不同本篇内容主要讲解“LibraBFT与比原链Bystack BBFT有什么不同”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带

    攻略 2021年12月20日
  • Java开发者编写SQL语句时常见错误分别有哪些

    技术Java开发者编写SQL语句时常见错误分别有哪些今天就跟大家聊聊有关Java开发者编写SQL语句时常见错误分别有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收

    攻略 2021年11月29日
  • Jmeter如何使用csv参数化Json数据

    技术Jmeter如何使用csv参数化Json数据这篇文章将为大家详细讲解有关Jmeter如何使用csv参数化Json数据,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。结合

    攻略 2021年11月17日