其他
教你轻松爬取全国40城5000+地铁站点数据!(附源码)
The following article is from 小一的学习笔记 Author xiaoyi
文末附源码
▶正文
爬取两个 div 中的城市数据(包括 ID 和拼音),生成城市集合 遍历城市集合,构造每一个城市的 url 访问 url,爬取对应城市的地铁站点数据
▶获取城市列表
url = 'http://map.amap.com/subway/index.html'
res = requests.get(url, headers={'User-Agent': get_ua()})
res.encoding = res.apparent_encoding
soup = BeautifulSoup(res.text, 'html.parser')
name_dict = []
# 获取显示出的城市列表
for soup_a in soup.find('div', class_='city-list fl').find_all('a'):
city_name_py = soup_a['cityname']
city_id = soup_a['id']
city_name_ch = soup_a.get_text()
name_dict.append({'name_py': city_name_py, 'id': city_id, 'name_ch': city_name_ch})
# 获取未显示出来的城市列表
for soup_a in soup.find('div', class_='more-city-list').find_all('a'):
city_name_py = soup_a['cityname']
city_id = soup_a['id']
city_name_ch = soup_a.get_text()
name_dict.append({'name_py': city_name_py, 'id': city_id, 'name_ch': city_name_ch})
df_name = pd.DataFrame(name_dict)
# 构造每个城市的url
url = "http://map.amap.com/service/subway?_1818387860087&srhdata=" + id + '_drw_' + cityname + '.json'
▶解析城市地铁站点
# 核心代码
df_per_zd = df_per_zd[['n', 'sl', 'poiid', 'sp']]
df_per_zd['gd经度'] = df_per_zd['sl'].apply(lambda x: x.split(',')[0])
df_per_zd['gd纬度'] = df_per_zd['sl'].apply(lambda x: x.split(',')[1])
df_per_zd.drop('sl', axis=1, inplace=True)
df_per_zd['路线名称'] = data_line['ln']
df_per_zd['城市名称'] = name
代码的运行界面如下:
最终一共是 5001 条数据,对应的全国 40 个开通地铁的城市。
部分数据截图如下:
再通过热力图简单看一下这些城市的分布情况:
数据已经有了,抽样验证了一下,发现只有少数站点的区域不对,手动处理一下就行。
爬到的数据已经确认无误,接下来就是如何分析的问题了,下节分析部分会详细介绍。
以上就是爬虫部分的全部内容
感兴趣的同学可以去练练手
本文仅供读者学习使用,不做其他用途!
后台回复:211102,即可领取本文的全部代码
往期文章
输出好看的表格,就用这个 Python 库!
用Python+可视化工具制作漂亮地图
手把手教你用Python爬取某网小说数据,并进行可视化分析