Python数据清洗:提取爬虫文本中的电话号码
很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:101677771
效果展示
原始数据
清洗数据
注意事项
每个号码前面带‘+’,而原始文本中有些号码带Fax前缀,为传真号码,需要剔除掉
- 剔除方法
首先将文本全部转换为小写,再将’ fax’(注意fax前有空格)转换成’ Fax’,则只要遇到大写F就说明紧接着的号码是传真号码。
接下来我们设置一个传真标志FaxFlg,默认值:0,遍历所有字符,一旦遇到了’F’,就将标志打开,表示下一个遇到的‘+’后面的号码我们需要舍弃掉,舍弃后又重新见FaxFlg设为0,继续遍历。
代码
# -*- coding: utf-8 -*-
"""
Created on Tue Aug 18 09:46:30 2020
@author: Songyou Han
"""
import os
import csv
# 获取cvs文件列表函数
def file_name(file_dir):
files = []
for root, dirs, file in os.walk(file_dir):
files = file #当前路径下所有非目录子文件
return files
# 电话号码提取函数
def ExtractRawData(source='raw_datas',destination='extract_phone'):
files = file_name(source)
dict = {}
for filename in files:
file = source+"/"+filename
datas = csv.reader(open(file,'r',encoding = "utf-8"))
data_list = []
for item in datas:
data_list.append(item[0])
dict.update({filename:data_list})
return dict
def ExtractPhoneNumber(rawData):
PhoneNumbersDict = {}
for key,value in rawData.items():
PhoneNumbersList = []
for row in value:
row = row.lower().replace(" fax"," Fax").replace(" ","")
IndexList = []
FaxFlg = 0
for i in range(len(row)):
if row[i] in ['F']:
FaxFlg = 1
continue
if row[i] in ['+']:
if FaxFlg == 0:
IndexList.append(i)
else:
FaxFlg = 0
PhoneNumbers = []
for index in IndexList:
i = index
PhoneNumber = '+' # 存放单个电话号码的盒子
while row[i+1] in ['0','1','2','3','4','5','6','7','8','9']:
PhoneNumber = PhoneNumber + row[i+1]
i += 1
if PhoneNumber not in PhoneNumbers:
PhoneNumbersList.append(PhoneNumber)
PhoneNumbers.append(PhoneNumber)
print("从以下文本中提取到号码(已去重):"+str(PhoneNumbers))
print("........................")
print(row)
print("========================")
PhoneNumbersDict.update({key:PhoneNumbersList})
return PhoneNumbersDict
def WritePhone(FileName,PhoneNumbersList):
f = open('extract_phone/(号码抽取)'+FileName,'w+')
for phone in PhoneNumbersList:
f.write("'"+phone+"'")
f.write("\n")
f.close()
rawData = ExtractRawData('raw_datas','extract_phone')
PhoneNumbersDict = ExtractPhoneNumber(rawData)
print("\n\n小伙子,你的电话号码提取完了,现在开始存入extract_phone文件夹中。。。。。。\n")
for key,value in PhoneNumbersDict.items():
WritePhone(key,value)
print("存入文件:\t(号码抽取)"+str(key))
print("\n存好了!!!")
Python数据清洗:提取爬虫文本中的电话号码的更多相关文章
- python学习笔记——爬虫学习中的重要库urllib
1 urllib概述 1.1 urllib库中的模块类型 urllib是python内置的http请求库 其提供了如下功能: (1)error 异常处理模块 (2)parse url解析模块 (3)r ...
- 【python】提取sql语句中的表名
前言 最近刚学python,写一个小工具时需要提取sql语句中表名,查询一番后找到一篇文章挺不错的,mark一下 PS.那篇文章是转载的,且没有标注转载自哪里 正文 import ply.lex as ...
- Python:Scrap爬虫过程中遇到的各种错误
1.KeyError: 'Spider not found: BDS' 原因:settings.py中缺少了几项与spider名字配置相关的项: BOT_NAME = 'BDS' SPIDER_MOD ...
- NLP(十五)让模型来告诉你文本中的时间
背景介绍 在文章NLP入门(十一)从文本中提取时间 中,笔者演示了如何利用分词.词性标注的方法从文本中获取时间.当时的想法比较简单快捷,只是利用了词性标注这个功能而已,因此,在某些地方,时间的识别 ...
- 用python正则表达式提取字符串
在日常工作中经常遇见在文本中提取特定位置字符串的需求.python的正则性能好,很适合做这类字符串的提取,这里讲一下提取的技巧,正则表达式的基础知识就不说了,有兴趣的可以看re的教程. 提取一般分两种 ...
- python正则表达式提取字符串
用python正则表达式提取字符串 在日常工作中经常遇见在文本中提取特定位置字符串的需求.python的正则性能好,很适合做这类字符串的提取,这里讲一下提取的技巧,正则表达式的基础知识就不说了,有兴趣 ...
- Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱(转)
原文:http://www.52nlp.cn/python-网页爬虫-文本处理-科学计算-机器学习-数据挖掘 曾经因为NLTK的缘故开始学习Python,之后渐渐成为我工作中的第一辅助脚本语言,虽然开 ...
- 【Python】Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱
本文转载自:https://www.cnblogs.com/colipso/p/4284510.html 好文 mark http://www.52nlp.cn/python-%E7%BD%91%E9 ...
- NLP入门(十一)从文本中提取时间
在我们的日常生活和工作中,从文本中提取时间是一项非常基础却重要的工作,因此,本文将介绍如何从文本中有效地提取时间. 举个简单的例子,我们需要从下面的文本中提取时间: 6月28日,杭州市统计局权 ...
随机推荐
- Springboot使用JdbcTemplate的使用
在spring-boot-starter-jdbc这个依赖包中一共分成四个部分. core,JdbcTemplate等相关核心接口和类 datasource,数据源相关的辅助类 object,将基本的 ...
- 虹软人脸识别—版本升级接口修改说明(C#)
自虹软发布了免费.离线版本人脸识别SDK,在Github上陆续分享了各个版本对应的 C# Demo.因为公司项目一直在使用虹软的SDK,因此每当虹软官网有新版本发布,我都会进行了解,并结合Demo进行 ...
- 29-main()的使用说明
* 1. main()方法作为程序的入口 * 2. main()方法也是一个普通的静态方法 * 3. main()方法可以作为我们与控制台交互的方式.(使用Scanner) 如何将控制台获取的数据传给 ...
- Prometheus监控神器-Alertmanager篇(1)
本章节主要涵盖了Alertmanager的工作机制与配置文件的比较详细的知识内容,由浅入深的给大家讲解. 警报一直是整个监控系统中的重要组成部分,Prometheus监控系统中,采集与警报是分离的.警 ...
- java_数组的定义与操作
数组定义和访问 数组概念 数组概念: 数组就是存储多个数据的容器,数组的长度固定,多个数据的数据类型要一致. 数组的定义 方式一 数组存储的数据类型[] 数组名字 = new 数组存储的数据类型[长度 ...
- SkyWalking 搭建及简单使用(Linux)
1.需求 公司项目采用微服务的架构,服务很多,人工监控是不可能的,项目的访问量很大,想通过日志查找某个方法中性能的问题也是非常困难的.但是系统的性能问题是不能忽视的.系统性能检测的问题如鲠在喉,经过长 ...
- 学习Hibernate5 JPA这一篇就够了
配套资料,免费下载 链接:https://pan.baidu.com/s/158JkczSacADez-fEMDXSYQ 提取码:2ce1 复制这段内容后打开百度网盘手机App,操作更方便哦 第一章 ...
- C#LeetCode刷题之#56-合并区间(Merge Intervals)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3676 访问. 给出一个区间的集合,请合并所有重叠的区间. 输入: ...
- C#LeetCode刷题之#653-两数之和 IV - 输入 BST(Two Sum IV - Input is a BST)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4098 访问. 给定一个二叉搜索树和一个目标结果,如果 BST 中 ...
- Android 内部存储读写介绍
内部存储读写 内容介绍 Android系统允许应用程序创建仅能够自身访问的私有文件,文件保存在设备的内部存储器上,在Linux系统下的/data/data//files目录中 Android系统不仅支 ...