文章目录

  • 任务
  • 已有
  • 过程
    • 1. 用c语言读入数据
    • 2. 用爬虫爬取微博数据
      • 基础设置
      • 观察数据
      • 数据清洗
      • 数据展示
        • 绘制高峰站点图像
        • 绘制高峰流量图
  • 写在后面

任务

学院的C语言课程设计选题为地铁模拟系统,除了实现购票和充值,题目还要求实现车辆调度功能,原本没有想到好的实现形式一直搁置,验收关头发现必要性。
经学长点拨,将其所做的公交车的调度方式进行移植。只需绘制发车时间与抵达终点站时间的线性图即可体现调度功能,并加入真实数据处理更具逼真性。

已有

  • 学长传给的公交车运行数据(excel表格)##
  • 微博官方账号每日公布昨日流量

过程

分别

1. 用c语言读入数据

C语言读入数据
C语言读入数据(优化版)

  • 计划任务

2. 用爬虫爬取微博数据

在多次尝试调用API均失败后,怀一线希望在网上搜寻,一个脚本可以成功运行。
可运行脚本

可通过此文章了解爬取新浪微博网站相关知识。

基础设置

# -*- coding: utf-8 -*-
import  random
import urllib.request
import json
import reimport requests
import time#定义要爬取的微博ID为武汉地铁运营
id= str(3186945861)#(input("请输入要抓的微博uid:"))na='a'
#设置代理IPiplist=['112.228.161.57:8118','125.126.164.21:34592','122.72.18.35:80','163.125.151.124:9999','114.250.25.19:80']proxy_addr="125.126.164.21:34592"#定义页面打开函数
def use_proxy(url,proxy_addr):req=urllib.request.Request(url)req.add_header("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0")proxy=urllib.request.ProxyHandler({'http':random.choice(iplist)})opener=urllib.request.build_opener(proxy,urllib.request.HTTPHandler)urllib.request.install_opener(opener)data=urllib.request.urlopen(req).read().decode('utf-8','ignore')return data
#获取微博主页的containerid,爬取微博内容时需要此id
def get_containerid():url='https://m.weibo.cn/api/container/getIndex?type=uid&value='+iddata=use_proxy(url,random.choice(iplist))content=json.loads(data).get('data')for data in content.get('tabsInfo').get('tabs'):if(data.get('tab_type')=='weibo'):containerid=data.get('containerid')return containerid

在验证可获取微博内容后,下一步就是将自己所需的数据剔出。

观察数据

###观察每一页的卡片数目,卡片即对应单个微博for i in range(20):weibo_url='https://m.weibo.cn/api/container/getIndex?type=uid&value='+id+'&containerid='+get_containerid()+'&page='+str(i)data=use_proxy(weibo_url,random.choice(iplist))content=json.loads(data).get('data')cards=content.get('cards')print(len(cards))


可推知,卡片为一个页面上显示的微博条目。

数据清洗

通过网上资料可知card_type为9则代表为微博内容,否则可能为广告等等。

#打印包含客流统计微博for card in cards:card_type=card.get('card_type')#print(card_type)if(card_type==9):mblog=card.get('mblog')#print(mblog)#if(str(mblog).find("客流")>0)  : text=mblog.get('text')print(text)

连接上部分运行结果

将含有【昨日客流】标签的正文提取出来。

利用正则表达式的知识,将所需信息提取出来

###匹配相应信息
#示例格式:
#【昨日客流】4月27日(周六),武汉城市轨道交通线网客运量(含换乘)为332.54万乘次,其中客流前五名依次为: 2号线汉口火车站、2号线江汉路站、2号线街道口站、4号线楚河汉街站、2号线中山公园站。
print(text)
#日期:x月x日
date=re.findall('\d+月\d+日',text)[0]
#星期:周x
day=re.findall('周\S',text)[0]
#客流量
flow=re.findall('为(.*?)万乘次',text)[0]
#排名前五
ranks=re.findall('依次为:(.*?)。',text)[0]
ranks=ranks.split('、')print(date)
print(day)
print(flow)
print(ranks)
for rank in ranks:print(rank)

数据展示

通过可视化将数据展示出来,参考文章解决横坐标过长无法显示完全问题。

绘制高峰站点图像

###绘制高峰站点图像
import matplotlib.pyplot as plt
import math
font = {'family' : 'SimHei','weight' : 'bold','size'  : '16'}fig3 = plt.figure(figsize=(10,6))
#plt.subplots_adjust(hspace=0.3)
# 创建子图及间隔设置ax = fig3.add_subplot(2,1,1)
plt.rc('font', **font) # pass in the font dict as kwargs
plt.rc('axes',unicode_minus=False)plt.xticks(fontsize = 17)#对坐标的值数值,大小限制
#plt.yticks(fontsize = 37)plt.xlabel('站点', fontproperties="SimHei")
plt.ylabel('提名次数')
#网格
plt.grid()
plt.bar(list(statisStop.keys()),list(statisStop.values()))
#plt.legend()ax.set_xticks(range(len(list(statisStop.keys()))))ax.set_xticklabels(list(statisStop.keys()), rotation=90)
plt.savefig('./stop.jpg')

绘制高峰流量图

##绘制高峰流量图
import matplotlib.pyplot as plt
import math
#设置字体
font = {'family' : 'SimHei','weight' : 'bold','size'  : '16'}fig3 = plt.figure(figsize=(10,6))
#plt.subplots_adjust(hspace=0.3)# 创建子图及间隔设置
ax = fig3.add_subplot(2,1,1)
plt.rc('font', **font) # pass in the font dict as kwargs
plt.rc('axes',unicode_minus=False)#对坐标字体大小限制
plt.xticks(fontsize = 10)
#plt.yticks(fontsize = 37)#设置坐标标签
plt.xlabel('日期')
plt.ylabel('流量(万乘次)')#网格
plt.grid()#将横坐标反转,符合时间逻辑
plt.plot(list(statisFlow.keys())[::-1],list(statisFlow.values())[::-1])#设置间距
ax.set_xticks(range(0,len(list(statisFlow.keys())),7))
ax.set_xticklabels(list(statisFlow.keys())[::-7], rotation=70)#保存图片
plt.savefig('./flow.jpg')

写在后面

在2020年,终于将这篇早已列为草稿的计划完成。但在今天,武汉的地铁已经停止运行3天,家中电视正在不停播报关于祸起武汉的肺炎的最新进展,或者是鼓舞民众的有力声音。
在这个大时代中,自己曾经处于事发的漩涡到底还是让人感觉魔幻,开学好像也随事态的愈发严重显得遥不可及。
希望这场风波快点平歇,一切好起来!

网络爬虫获取地铁人流量数据相关推荐

  1. Python学习——(2)通过网络爬虫获取数据

    通过网络爬虫获取数据 1. 和爬虫有关的HTTP ​ HTTP是网络数据通信的基础.在本节中会围绕Python网络爬虫讲述常用HTTP知识点. 1.1 基于HTTP的请求处理流程 ​ 当用户在浏览器的 ...

  2. 写一个爬虫来获取地铁信息数据

    用面向对象的方法来获取地铁信息数据 写在前面 具体代码如下 代码说明 这是说明 写在前面 最近在知乎上看到一篇关于地铁数据的分析,该篇文章很全面的分析了大陆(包括澳门香港)有地铁城市的分布.线路.站点 ...

  3. Python 网络爬虫笔记8 -- 股票数据定向爬虫

    Python 网络爬虫笔记8 – 股票数据定向爬虫 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接:Pyth ...

  4. 小猿圈分享利用python网络爬虫获取网易云歌词

    今天小猿圈给大家分享网易云音乐歌词爬取方法. 本文的总体思路如下: 找到正确的URL,获取源码: 利用bs4解析源码,获取歌曲名和歌曲ID: 调用网易云歌曲API,获取歌词: 将歌词写入文件,并存入本 ...

  5. 网络爬虫——中国大学排名数据抓取

    网络爬虫--中国大学排名数据抓取 目标网址 中国大学排名网:http://www.zuihaodaxue.com/zuihaodaxuepaiming2019.html 全球有很多份大学排名,这里以上 ...

  6. 手把手教你使用Python网络爬虫获取B站视频选集内容(附源码)

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 位卑未敢忘忧国,事定犹须待阖棺. ...

  7. [遥感]利用python爬虫获取美国冰雪数据中心的数据

    00. 写在前面: 由于最近学习方面需要用到NSIDC(美国冰雪数据中心)的数据进行计算,但是手工下载又特别耗费时间,需要一个一个去点击,所以我尝试着去写一个小爬虫获取所需数据. 对所有需要在NSID ...

  8. Java爬虫获取网页表格数据

    //Java爬虫获取网页表格数据 public class Pachong implements Runnable { public void run() { String Rpt_date = nu ...

  9. Python网络爬虫获取淘宝商品价格

    1.Python网络爬虫获取淘宝商品价格代码: #-*-coding:utf-8-*- ''' Created on 2017年3月17日 @author: lavi ''' import reque ...

最新文章

  1. matlab jdbc mysql_Matlab连接MySQL(ODBC及JDBC驱动)
  2. SOA:A note on RPC
  3. django的from组件
  4. django数据库迁移问题
  5. 图像处理之 opencv 学习---opencv 中的常用算法
  6. 每个程序员都可能犯过的10个错误
  7. 苹果怎么付费购买内存_【苹果手机多长时间清理一次内存,怎么清理?】
  8. 整数数组按绝对值排序
  9. python中库是什么意思_python库是什么意思
  10. C语言实现走迷宫小游戏
  11. 个人信息安全规范----9、个人信息保护政策模板
  12. python opencv去图片水印(图片底色为白色)
  13. 白鹭(egret)搜素引擎入门
  14. 跨考计算机要选择408吗,408难度比较大,对于跨考更是如此,应从以下三个方面做准备...
  15. Dagum Gini Decomposition,Dagum基尼系数分解的python实例
  16. 《Python编程入门到实践》 第四章 操作列表
  17. 如何把源代码格式复制到WPS文档中
  18. 2021-02-03-linux命令
  19. 从苏宁电器到卡巴斯基(第二部)第30篇:我当高校教师的这几年 VI
  20. 区块链技术与第四次工业革命之于人类的意义

热门文章

  1. qq2005beta1/2/3 cs 协议 release 1
  2. 我们已在路上,希望就在前方
  3. vCenter Server 补丁升级手册
  4. 硬件开发:嵌入式系统知识和接口技术(值得收藏)
  5. Android 常用正则表达式,2021年Android大厂面试分享
  6. 2021-05-26投资基金的选择,基本面信息如何分析
  7. [2022CISCN]ez_usb
  8. 【CTO讲堂】双创背景下的移动开发及变现之路
  9. 笔记神器-Obsidian快速使用入门教程
  10. 【Java并发编程】Java多线程(四):FutureTask 源码分析