基于python和某公共交通网站实现爬取城市公交和地铁的线路和站点的功能

一、爬取公共交通线路和站点

#导入python库
import json
import requests
from lxml import etree
import pandas as pd
import geopandas as gpd
from shapely.geometry import Pointimport transbigdata as tbd
from tqdm import tqdm#获得所有的网页url
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0'}
url = 'http://shanghai.8684.cn' ##开始的URL地址def request_html(url):sort = requests.get(url = url,headers = headers)tree = etree.HTML(sort.text)#提取线路分类信息route_list = tree.xpath("//div[@class='pl10'][3]/div/a/@href")#print(sort)route_url1 = []for route in route_list:r = url + routeroute_url1.append(r)return route_url1#获取上海市所有公共交通线路名称
names = [
'轨道交通',
'常规线路',
'高峰线路',
'夜宵线路',
'轮渡线路',
'穿梭巴士',
'旅游线路',
'机场线路',
'虹桥枢纽线路',
'国际旅游度假区线路',
'中运量线路',
'申崇专线',
'跨省线路',
'BRT快速公交',
'扫墓专线',
'进博会专线',
'定制公交',
'区域公交-普陀',
'区域公交-长宁',
'区域公交-嘉定',
'区域公交-宝山',
'区域公交-青浦',
'区域公交-金山',
'区域公交-闵行',
'区域公交-奉贤',
'区域公交-浦东',
'区域公交-崇明',
'区域公交-松江',
'文字线路-市枢往返郊区',
'文字线路-郊区往返郊区']
count = 0
for i in request_html(url)[0:1]:print(i)#得到每一页的公共交通线路名称PUT = []soup = BeautifulSoup(requests.get(i).text, 'lxml')soup_div = soup.find_all('div',attrs = {'class':'list clearfix'})[0]soup_div_a = BeautifulSoup(str(soup_div),'lxml')for j in soup_div_a.div.find_all('a'):PUT.append(str(j).split('">')[1][:-4])#线路名称数据清洗,去除停运的PUT = [i.split('(')[0] for i in PUT ] PUT = pd.Series(PUT)PUT = PUT[-(PUT.str.contains('停运'))]PUT = PUT.str.replace('轨道交通','地铁')#调用tbd获取线路和站点数据line,stop = tbd.getbusdata('上海',list(PUT)) #坐标系为84line.crs = 4326stop.crs = 4326line.to_file('站点_地铁+公交\\lines\\'+names[count] +'.shp',encoding = 'utf-8')stop.to_file('\站点_地铁+公交\\stops\\'+names[count] +'.shp',encoding = 'utf-8')count = count +1

二、清洗数据

代码如下(示例):

#重新导入,并去重
gdf_stops = gpd.GeoDataFrame(columns = ['stationnam', 'linename', 'lon', 'lat', 'line', 'id', 'geometry'])
gdf_stops = gdf_stops.set_geometry('geometry')
for i in names:stop = gpd.read_file('\\站点_地铁+公交\\stops\\'+i+'.shp')gdf_stops = pd.concat([gdf_stops,stop])#去重
gdf_stops = gdf_stops.drop_duplicates()
gdf_stops.crs = 4326
gdf_stops.to_file(r'\站点_地铁+公交\sh_stops.shp',encoding = 'utf-8')

思路总结

①基于在线公交网站爬取其静态页面,得到该城市的所有公交线路名称。(存在少部分线路名称更新不及时而导致后面爬取失败)
②利用tbd的getbusdata函数爬取线路及站点数据。(存在爬取重复线路情况,比如13号线和13号线西延伸就可能导致重复爬取13号线)
③对爬取的数据进行去重等处理,提高数据质量。

爬取公共交通的线路和站点相关推荐

  1. 【Python爬虫】爬取公共交通站点数据

    首先,先介绍一下爬取公交站点时代码中引入的库. requests:使用HTTP协议向网页发送请求并获得响应的库. BeautifulSoup:用于解析HTML和XML网页文档的库,简化了页面解析和信息 ...

  2. 高德地图python爬虫 商家_Python爬虫练习:爬取高德地图地铁线路及站点数据

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:Darcy频道 # coding=utf-8 import requ ...

  3. 爬虫实战—轻松爬取全国40城5000+地铁站点数据!附源码和数据集

    原文链接:小一教你轻松爬取全国40城5000+地铁站点数据!附源码和数据集 大家好,我是小一 上一篇文章讲了一个失败的数据分析案例,导致失败最最主要的原因就两个字:数据 有时候,爬虫爬到的数据是很珍贵 ...

  4. 小一教你轻松爬取全国40城5000+地铁站点数据!附源码和数据集

    大家好,我是小一 上一篇文章讲了一个失败的数据分析案例,导致失败最最主要的原因就两个字:数据 有时候,爬虫爬到的数据是很珍贵.很稀缺,但是在实际项目最好还是多点谨慎,保证万无一失. 今天介绍一种新的 ...

  5. 教你轻松爬取全国40城5000+地铁站点数据!(附源码)

    大家好,我是 辰哥~ 今天介绍一种新的 获取城市地铁站点数据的方法,而且不再只是北上广深四个城市,而是 全国开通地铁的城市. 对了,你觉得全国有多少个城市开通了地铁? 文末附源码 ▶正文 今天爬取数据 ...

  6. python 爬取百度地图的南京市公交站点

    输入公交路线,获取路线上下行的公交站点名称 import json import math import random import refrom lxml import etree import r ...

  7. 用python爬取城市公交路线及站点

    在Python中,可以通过requests.Beautiful Soup和Selenium等工具来爬取城市公交路线及站点数据.下面是大致的步骤: 1. 确定数据源:找到能提供需要的公交路线及站点数据的 ...

  8. python统计爬取全国地铁线路站点

    结果:输出json文件,格式如下图 代码: # coding=utf-8 import requests from bs4 import BeautifulSoup import json impor ...

  9. 高德地图交通态势爬取并存入MySQL数据库

    高德地图交通态势爬取并存入mysql数据库 高德地图交通态势开放api链接: 高德交通态势 高德地图交通态势使用流程: 第一步,申请"Web服务API接口"密钥(Key): 第二步 ...

最新文章

  1. 如何在数字前面填充0,在股票代码前面补上0的三种方法
  2. 一类SG函数递推性质的深入分析——2018ACM陕西邀请赛H题
  3. python在工厂中的应用_什么是工厂函数?Python 中工厂函数怎么理解?
  4. vue-cli3插件初体验
  5. nssl1231-Gift【01背包,dp】
  6. FISSA:融合项目相似度模型和自注意网络的时序推荐
  7. eclipse 统计代码行数
  8. linux内核被加载的过程
  9. EFK+sentinl报警机制
  10. Alex 的 Hadoop 菜鸟教程: 第6课 Hbase 安装教程
  11. Typora更换炫酷主题(含主题下载云盘链接)
  12. 钓鱼网站制作Kali
  13. 发光二极管之二——正负极如何判断
  14. 二、stl ,模拟,贪心等 [Cloned] E - 贪心
  15. Nginx反向代理,返回405错误的解决办法
  16. 创建telegram 机器人
  17. 范冰冰戛纳再惊艳 搜狗网址导航带你重温女神经典作品
  18. 从最新艾瑞报告,探寻通信云厂商融云的「护城河」
  19. 2021年新手做seo怎么做,几大绝招快速上排名收录
  20. c沙箱与容器_orw技术分享

热门文章

  1. Self-Supervised Anomaly Detection A Survey and Outlook
  2. Java数据审计工具:Envers and JaVers比较
  3. 教授课程总结:脱发原因以及自救
  4. 【人工智能】深度学习:扩散模型(Diffusion Model) [2]
  5. 高熵合金AlCoCrFeNi/金刚石摩擦案例代码
  6. OpenCV4.x图像处理实例-仿微信视频通话背景模糊效果
  7. Crackme006 - 全新160个CrackMe深度解析系列(图文+视频+注册机源码)
  8. 大话Linux之 跟我走吧,现在就出发[0]引子
  9. 编程入门:计算机基础知识 JAVA的基础知识
  10. 计算机里面哪个代表度数,我总看电脑,眼镜度数配低点是不是更好呢