爬取武汉所有的公交站名

BY: ceyewan

国庆深度游武汉的时候,我发现,“晴川大道晴川阁”和“江堤中路江堤乡”这两个公交站名有点意思啊,很骚啊。于是我就想,不会吧,不会吧,全武汉该不会只有这两个这样式名字的公交站吧。

于是,现在答案来了,在我爬取了全武汉760条公交线路的7734个站点后,一共找到了31个。

确定目标网站

我们打开网站可以看到:

我们按照第一个分类查找,点击可以发现,所有的url都是由规律的。不包括地铁,就是从2到15。

然后我们能在这个页面里面获取该地区所有的公交路线的url,最后通过requests公交路线的url,获得路线的所有站点。

思路步骤

第一步,分析网站,获取urls

def get_area_urls():urls = ['https://m.8684.cn/wuhan_t{}'.format(str(i)) for i in range(2, 16, 1)]return urls

第二步,请求这些地区分类url,获得车次的urls

def get_bus_urls(area_urls):obj = re.compile(r'<a href="/wuhan_x_(?P<url>.*?)" title=".*?">.*?</a>', re.S)bus_urls = []for area_url in area_urls:resp = requests.get(area_url)bus_hrefs = obj.finditer(resp.text)for bus_href in bus_hrefs:dic = bus_href.groupdict()bus_urls.append('https://m.8684.cn/wuhan_x_' + dic['url'])resp.close()return bus_urls

第三步,请求车次的url,获得站名,并且写入文件。

def get_station(bus_url):f = open('wuhan_bus.csv', mode='a+', encoding='utf-8', newline='')csvwriter = csv.writer(f)station_list = []bus_resp = requests.get(bus_url)page = BeautifulSoup(bus_resp.content, 'html.parser')bus_name = page.find('h1')station_list.append(bus_name.text[:-1])div = page.find('div', class_="cell-group show")stations = div.find_all('span', class_="place")for station in stations:station_list.append(station.text.strip())csvwriter.writerow(station_list)bus_resp.close()f.close()

第四步,读取文件,获得我们需要的站点,写入结果文件。

def get_result():list = []with open('wuhan_bus.csv', 'r', encoding='utf-8') as f:reader = csv.reader(f)for bus_line in reader:for station in bus_line:# 筛选条件if len(station) == 7 and station[0] == station[4] \and station[1] == station[5]:list.append(station)list = set(list)    # 剔除重复结果f = open('wuhan_bus_result.csv', 'w', encoding='utf-8', newline='')csvwriter = csv.writer(f)for station in list:csvwriter.writerow([station])f.close()

结果展示

贴一份完整代码

import requests
from bs4 import BeautifulSoup
import csv
import redef get_station(bus_url):f = open('wuhan_bus.csv', mode='a+', encoding='utf-8', newline='')csvwriter = csv.writer(f)station_list = []bus_resp = requests.get(bus_url)page = BeautifulSoup(bus_resp.content, 'html.parser')bus_name = page.find('h1')station_list.append(bus_name.text[:-1])div = page.find('div', class_="cell-group show")stations = div.find_all('span', class_="place")for station in stations:station_list.append(station.text.strip())csvwriter.writerow(station_list)bus_resp.close()f.close()def get_area_urls():area_urls = ['https://m.8684.cn/wuhan_t{}'.format(str(i)) for i in range(2, 16, 1)]return area_urlsdef get_bus_urls(area_urls):obj = re.compile(r'<a href="/wuhan_x_(?P<url>.*?)" title=".*?">.*?</a>', re.S)bus_urls = []for area_url in area_urls:resp = requests.get(area_url)bus_hrefs = obj.finditer(resp.text)for bus_href in bus_hrefs:dic = bus_href.groupdict()bus_urls.append('https://m.8684.cn/wuhan_x_' + dic['url'])resp.close()return bus_urlsdef get_result():list = []with open('wuhan_bus.csv', 'r', encoding='utf-8') as f:reader = csv.reader(f)for bus_line in reader:for station in bus_line:if len(station) == 7 and station[0] == station[4] and station[1] == station[5]:list.append(station)list = set(list)    # 剔除重复结果f = open('wuhan_bus_result.csv', 'w', encoding='utf-8', newline='')csvwriter = csv.writer(f)for station in list:csvwriter.writerow([station])f.close()def main():# 获得地区分类的urlarea_urls = get_area_urls()print("get_area_urls is ok")# 获得所有车的urlbus_urls = get_bus_urls(area_urls)print("get_bus_urls is ok")# 去所有车的url里面找到所有的站点for bus_url in bus_urls:get_station(bus_url)print(f"{bus_url} get_station is ok")# 分析数据,得到我们要的结果get_result()if __name__ == '__main__':main()

爬取武汉所有的公交站名相关推荐

  1. python爬取武汉二手房房价

    第一次的爬取老师说可能不够好,这的那的,那就再来一次呗. 她推荐我们爬取武汉二手房的房价,因为里面的信息比较全. 红色圈出来的都需要爬,这老师,有点坑. 局限比较大,只能存放一页的数据,因为这个网站反 ...

  2. pyhton爬取武汉地铁信息

    pyhton爬取武汉地铁信息 话不多说,直接上代码 from lxml import etree import urllib3.request import pandas as pd urllib3. ...

  3. Python爬取武汉店铺出租转让信息

    Python爬取武汉店铺出租转让信息 摘要:由于有亲戚想到武汉发展,开个店面做点小生意,实地考察的效率不算太高,于是乎就在网上收集相关的转让信息,做第一步筛选,希望能够起到一些作用~ 技术组合:req ...

  4. Python爬取并绘制广州市公交线路

    广州市公交线路 从公交信息网站上爬取了全广州市的公交路线,但是这个路线没有公交的经纬度信息 于是,再通过高德地图爬取每条公交路线的经纬度信息 不过高德地图的反爬比较厉害,只爬到了6百多条公交路线,如图

  5. python利用高德接口,爬取武汉地区的POI--一个不太成熟的BUG,程序总是跑着跑着就假死了。

    说明 1.遇到的问题 可是爬取过程中总是不顺利,程序总是爬着爬着就不动了,有时爬几千条假死,有时爬几万条假死.数据库中没有新数据增加,程序也不报错,也不中止.CPU,内存占用也不高,硬盘中也还有空间, ...

  6. python爬虫爬取武汉房价信息

    Python有一个大作业,老师说想不到的可以试试爬武汉房价,反正想不到,那就爬一下喽. 我爬了网上武汉的房价信息,有帮助的可以看看下. 有一些小Bug,但是大体还是不打紧的,可以用. #Time : ...

  7. python爬虫——requests+xpath 爬取8684公交查询网站

    一.分析网站 url = 'http://xian.8684.cn/' 1.第二层路线xpath: # 查找以数字开头的所有链接number_href_list = tree.xpath('//div ...

  8. Scrapy爬取北京公交并保存MYSQL数据库实例

    前言就不过多赘述了,大家只要把scrapy的基本了解之后就可以完成这个项目. 一:创建scrapy项目: 打开控制台输入 scrapy startproject beibus(这个是项目名称,可以自己 ...

  9. 【大数据】城市公交网络分析与可视化(一):基于Python爬取公交车行驶路径等基本信息

    博客内容介绍 借助高德地图API,爬取指定公交线路(国内绝大多数线路,给定城市名和路线名即可)的始发站.终点站.行驶路径(行车轨迹).站点名称和坐标.行驶距离等与公交车有关的基本信息,并将其保存到Ex ...

最新文章

  1. 台式电脑不拉网线上网_用“隐形网线”让台式机快速稳定上网?强迫症有救了...
  2. Linux中TFTP使用详解
  3. 面试题55 - I. 二叉树的深度
  4. Pair Project:电梯控制程序 编写心得 最新版
  5. 19/03/17Python笔记
  6. python总结与思考_Python小结 – pip 升级包总结
  7. 联通盒子系统服务器,联通IPTV盒子刷机方法,实现软件任意安装
  8. Unity 基础知识参考
  9. 速卖通关键词挖掘工具_2020网站关键词挖掘工具有哪些
  10. 平衡树--替罪羊树 *
  11. 建站系列:有云服务器和域名怎么建设网站?
  12. [微信小程序]--关于对文章浏览量的实现(inc)
  13. idea删除文件时出现选项 “Safe delete ( with usage search)“ 和 “Search in comments and strings“
  14. java制作进度条,Java制作进度条
  15. 怎么求最大公因数和最小公倍数
  16. 卢卡斯定理扩展卢卡斯
  17. Windows 批量打印
  18. mac要装anaconda吗_在Mac OS X上安装Anaconda
  19. 数据库管理系统有哪些
  20. PAP和CHAP协议介绍

热门文章

  1. 行列式的基本定义与性质(笔记)
  2. JavaPoet的基本使用
  3. Hadoop第四天--shell编程
  4. Redis地理算法GEO解析和应用
  5. VsCode c++环境配置(最新版)
  6. instr()函数的格式
  7. GAS汇编器伪指令大全
  8. 解决Word中无法使用Mathtype
  9. 八皇后(USACO)
  10. Unity UGUI Batches合批规则详解(含源码)