新浪微博爬取笔记(4):数据清理
数据清理的部分很多,其实爬数据的过程中步骤的间隔也要做数据清理,都是很琐碎繁杂的工作。总结经验的话,就是:
1、一定要用数据库存储数据
(我因为还不太会数据库,为了“节省学习时间”,所有数据项都用txt存储,直到最后出现了多个种类之间查找,文件夹树变得比较复杂,才觉得当初即使使用MySQL也会提高效率)
2、处理异常的语句不嫌多
3、处理数据的脚本最好打包成函数,尽量减少运行前需要改源码的机会,变量从外部传递
4、工作流程要整体写出来画成图方便查找,步骤和文件多了会有点混乱
以处理时间为例:
我这次需要得到用户的latency, 也就是从微博发出到该用户转发的时间间隔。
一条微博的信息line在txt中是这样的:
M_CdHsYyHZd 转发[313] 04月17日 16:27 来自微博 weibo.com
一条转发:
/yunxiang 2014-09-28 12:46:07 来自火星Android /n/%E5%8D%9A%E7%89%A9%E6%9D%82%E5%BF%97
用python处理这样一条line, 基本需要的函数就是 .split() 以及各种列表操作;
以处理时间部分为例。python中用来处理时间的模块主要是datetime和time, datetime比较好用, time用来得到文件信息,比如创建、修改时间之类。
时间部分有不同的格式,比如:
今天 15:002014-12-04 20:49:4831分钟前04月17日 22:00
这样就要写不同的匹配方案:
1 if len(re.compile('\d+-\d+-\d+').findall(time_area[0])) == 1: #2014-12-04 20:49:48 2 [year, month, day] = [i for i in re.compile('\d+').findall(time_area[0])] 3 [hour, minute, sec] = [i for i in re.compile('\d+').findall(time_area[1])[0:3]] 4 t = [year, month, day] + [hour, minute, sec] 5 t = [int(i) for i in t] 6 resultTime = datetime.datetime(*t) 7 elif len([int(i) for i in re.compile('\d+').findall(time_area[0])]) == 1: # 31 minutes ago 8 postTime = file_time - datetime.timedelta(minutes = int(re.compile('\d+').findall(time_area[0])[0])) 9 resultTime = postTime 10 elif len([int(i) for i in re.compile('\d+').findall(time_area[0])]) == 2: #04 17 22:00 11 [year, month, day] = [file_time.year, re.compile('\d+').findall(time_area[0])[0], re.compile('\d+').findall(time_area[0])[1]] 12 [hour, minute, sec] = [re.compile('\d+').findall(time_area[1])[0], re.compile('\d+').findall(time_area[1])[1], 30] 13 t = [year, month, day] + [hour, minute, sec] 14 t = [int(i) for i in t] 15 resultTime = datetime.datetime(*t) 16 elif len(re.compile('\d+').findall(time_area[0])) == 0:#today 15:00 17 [year, month, day] = [file_time.year, file_time.month, file_time.day] 18 [hour, minute, sec] = [re.compile('\d+').findall(time_area[1])[0], re.compile('\d+').findall(time_area[1])[1], 30] 19 t = [year, month, day] + [hour, minute, sec] 20 t = [int(i) for i in t] 21 resultTime = datetime.datetime(*t) 22 else: 23 print "unexpected time type, check plz" 24 sys.exit(0)
需要注意很多细节部分,比如 len() 可以对列表求长度,也可以求字符串长度; re.compile() 匹配结果返回的是字符串;等等。
每一次运行完后生成的数据结构可以用pickle存储,在我的例子中所存储的是字典dict。用法是这样的:
1 import pickle 2 3 try: 4 with open('foreDic.pickle', 'rb') as f: 5 result = pickle.load(f) 6 except: 7 result = {}
这是在最开始时导入上次存储的数据结构。 pickle.load() 如果遇到了空文件会报错,因此处理这个异常,如果文件为空或是找不到文件,就新建一个空字典。
1 with open('foreDic.pickle', 'wb') as f: 2 pickle.dump(result, f)
最后将result字典存储到pickle文件中。
转载于:https://www.cnblogs.com/manqing/p/4456724.html
新浪微博爬取笔记(4):数据清理相关推荐
- 《崔庆才Python3网络爬虫开发实战教程》学习笔记(5):将爬虫爬取到的数据存储到TXT,Word,Excel,Json等文件中
本篇博文是自己在学习崔庆才的<Python3网络爬虫开发实战教程>的学习笔记系列,此套教程共5章,加起来共有34节课,内容非常详细丰富!如果你也要这套视频教程的话,关注我公众号[小众技术] ...
- 爬取东方财富网数据笔记
小白是如何学习爬虫的?首先先从简单的入手,在b站上寻找爬虫视频,这里推荐Python爬虫编程基础5天速成(2021全新合集)Python入门+数据分析_哔哩哔哩_bilibili 有编程基础的仅需要观 ...
- mysql 查询 系统字段 自然日_吴裕雄--天生自然python数据清洗与数据可视化:MYSQL、MongoDB数据库连接与查询、爬取天猫连衣裙数据保存到MongoDB...
本博文使用的数据库是MySQL和MongoDB数据库.安装MySQL可以参照我的这篇博文:https://www.cnblogs.com/tszr/p/12112777.html 其中操作Mysql使 ...
- python爬虫课设-爬取3000条数据并做数据可视化
很久以前接的单子,分享一下(挺水的,将就着看吧) 文章目录 作业要求 数据爬取 爬取结果 数据处理 数据可视化 大作业文档 作业要求 <Python与数据分析>期末大作业要求(2020-2 ...
- 【爬虫实践】记一次Scrapy框架入门使用爬取豆瓣电影数据
本次的学习分享主要是使用一次Scrapy框架,毕竟在很多次的时候,自己在提取一些或是需要实验数据的时候,数据量要求不大,很快便能通过简单的request等库进行调用,然后获取数据. 这次,则是想要使用 ...
- 用Scrapy爬虫框架爬取食品论坛数据并存入数据库
这篇文章主要给大家介绍了食品网站的数据采集和存储过程,详解了如何分析网页结构.爬虫策略.网站类型.层级关系.爬虫方法和数据存储过程,最终实现将帖子的每条评论爬取到数据库中,并且做到可以更新数据,防止重 ...
- PHP爬取post网页数据,php curl发送post请求爬取webService接口数据简单实例
header('Content-Type: text/html;charset=utf-8'); /** * 使用curl发送post请求 * @param $url * @param string ...
- Python 爬取北京二手房数据,分析北漂族买得起房吗?(附完整源码)
来源:CSDN 本文约3500字,建议阅读9分钟. 本文根据Python爬取了赶集网北京二手房数据,R对爬取的二手房房价做线性回归分析,适合刚刚接触Python&R的同学们学习参考. 房价高是 ...
- 使用进程池模拟多进程爬取url获取数据,使用进程绑定的回调函数去处理数据...
1 # 使用requests请求网页,爬取网页的内容 2 3 # 模拟使用进程池模拟多进程爬取网页获取数据,使用进程绑定的回调函数去处理数据 4 5 import requests 6 from mu ...
- 对爬虫爬取到的数据进行存储
已写章节 第一章 网络爬虫入门 第二章 基本库的使用 第三章 解析库的使用 第四章 数据存储 第五章 动态网页的抓取 文章目录 已写章节 第四章 数据存储 4.1 文件存储 4.1.1 TXT文件存储 ...
最新文章
- Java和.NET使用DES对称加密的区别
- Codeforces 352B - Jeff and Periods
- Linux 计划任务 访问网页
- 让我们带着感恩的心生活
- vc 文本框 只显示下划线_【Axure9百例】36.文本框搜索自动匹配
- 如何计算字符串中出现的字符串?
- 用java将excel数据导入txt
- ALV 后台输出时,增加spool假脱机的宽度
- 5g虚拟技术旅游_5G赋能VR产业变革
- Codeforces Round #337 (Div. 2) C. Harmony Analysis
- html中相同结构标签怎么区分,html标签结构总结
- 【Vue2.0】—过滤器(七)
- centos7 运行 jar_CentOS7下部署开源网络流量回溯分析系统Moloch
- linux opendir php,PHP遍历目录函数opendir()、readdir()、closedir()、rewinddir()总结
- 不恢复余数除法原理_小学数学基础概念大全,家长收藏起来,一条一条讲给孩子听。能全背下来的,考试也不带怕的了!...
- fast路由器pppoe连接服务器无响应,迅捷路由器系统日志如何排除PPPOE拨号故障
- CodeForces - 985A Chess Placing(水)
- 数字证书包含哪些内容
- 企业测试环境部署(一)
- 原来window7系统转化为xp的时候,安装系统的时候,出现蓝屏错误(stop:0x0000007b)