数据清理的部分很多,其实爬数据的过程中步骤的间隔也要做数据清理,都是很琐碎繁杂的工作。总结经验的话,就是:

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):数据清理相关推荐

  1. 《崔庆才Python3网络爬虫开发实战教程》学习笔记(5):将爬虫爬取到的数据存储到TXT,Word,Excel,Json等文件中

    本篇博文是自己在学习崔庆才的<Python3网络爬虫开发实战教程>的学习笔记系列,此套教程共5章,加起来共有34节课,内容非常详细丰富!如果你也要这套视频教程的话,关注我公众号[小众技术] ...

  2. 爬取东方财富网数据笔记

    小白是如何学习爬虫的?首先先从简单的入手,在b站上寻找爬虫视频,这里推荐Python爬虫编程基础5天速成(2021全新合集)Python入门+数据分析_哔哩哔哩_bilibili 有编程基础的仅需要观 ...

  3. mysql 查询 系统字段 自然日_吴裕雄--天生自然python数据清洗与数据可视化:MYSQL、MongoDB数据库连接与查询、爬取天猫连衣裙数据保存到MongoDB...

    本博文使用的数据库是MySQL和MongoDB数据库.安装MySQL可以参照我的这篇博文:https://www.cnblogs.com/tszr/p/12112777.html 其中操作Mysql使 ...

  4. python爬虫课设-爬取3000条数据并做数据可视化

    很久以前接的单子,分享一下(挺水的,将就着看吧) 文章目录 作业要求 数据爬取 爬取结果 数据处理 数据可视化 大作业文档 作业要求 <Python与数据分析>期末大作业要求(2020-2 ...

  5. 【爬虫实践】记一次Scrapy框架入门使用爬取豆瓣电影数据

    本次的学习分享主要是使用一次Scrapy框架,毕竟在很多次的时候,自己在提取一些或是需要实验数据的时候,数据量要求不大,很快便能通过简单的request等库进行调用,然后获取数据. 这次,则是想要使用 ...

  6. 用Scrapy爬虫框架爬取食品论坛数据并存入数据库

    这篇文章主要给大家介绍了食品网站的数据采集和存储过程,详解了如何分析网页结构.爬虫策略.网站类型.层级关系.爬虫方法和数据存储过程,最终实现将帖子的每条评论爬取到数据库中,并且做到可以更新数据,防止重 ...

  7. PHP爬取post网页数据,php curl发送post请求爬取webService接口数据简单实例

    header('Content-Type: text/html;charset=utf-8'); /** * 使用curl发送post请求 * @param $url * @param string ...

  8. Python 爬取北京二手房数据,分析北漂族买得起房吗?(附完整源码)

    来源:CSDN 本文约3500字,建议阅读9分钟. 本文根据Python爬取了赶集网北京二手房数据,R对爬取的二手房房价做线性回归分析,适合刚刚接触Python&R的同学们学习参考. 房价高是 ...

  9. 使用进程池模拟多进程爬取url获取数据,使用进程绑定的回调函数去处理数据...

    1 # 使用requests请求网页,爬取网页的内容 2 3 # 模拟使用进程池模拟多进程爬取网页获取数据,使用进程绑定的回调函数去处理数据 4 5 import requests 6 from mu ...

  10. 对爬虫爬取到的数据进行存储

    已写章节 第一章 网络爬虫入门 第二章 基本库的使用 第三章 解析库的使用 第四章 数据存储 第五章 动态网页的抓取 文章目录 已写章节 第四章 数据存储 4.1 文件存储 4.1.1 TXT文件存储 ...

最新文章

  1. Java和.NET使用DES对称加密的区别
  2. Codeforces 352B - Jeff and Periods
  3. Linux 计划任务 访问网页
  4. 让我们带着感恩的心生活
  5. vc 文本框 只显示下划线_【Axure9百例】36.文本框搜索自动匹配
  6. 如何计算字符串中出现的字符串?
  7. 用java将excel数据导入txt
  8. ALV 后台输出时,增加spool假脱机的宽度
  9. 5g虚拟技术旅游_5G赋能VR产业变革
  10. Codeforces Round #337 (Div. 2) C. Harmony Analysis
  11. html中相同结构标签怎么区分,html标签结构总结
  12. 【Vue2.0】—过滤器(七)
  13. centos7 运行 jar_CentOS7下部署开源网络流量回溯分析系统Moloch
  14. linux opendir php,PHP遍历目录函数opendir()、readdir()、closedir()、rewinddir()总结
  15. 不恢复余数除法原理_小学数学基础概念大全,家长收藏起来,一条一条讲给孩子听。能全背下来的,考试也不带怕的了!...
  16. fast路由器pppoe连接服务器无响应,迅捷路由器系统日志如何排除PPPOE拨号故障
  17. CodeForces - 985A Chess Placing(水)
  18. 数字证书包含哪些内容
  19. 企业测试环境部署(一)
  20. 原来window7系统转化为xp的时候,安装系统的时候,出现蓝屏错误(stop:0x0000007b)

热门文章

  1. python爬虫反虫之setcookie
  2. java 比较日期大小(方法之一compare to 备忘)
  3. 计算机专业小米笔记本推荐,小米笔记本电脑怎么样有哪些型号,哪款性价比高?...
  4. 数据质量管理方法有哪些
  5. 微信小程序体验版打开调试模式才能正常调用接口问题
  6. 【SPSS】重复测量设计方差分析-单因素
  7. Docker-基本命令和漏洞分享
  8. 多张eps合并成一张
  9. 鸿蒙开发板hi3861硬件SPI通信arduinoUNO
  10. 常见不透明度16进制转换