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日,杭州市统计局权 ...
随机推荐
- ABC 158 F - Removing Robots dp 单调栈
LINK:Removing Robots 没想到 自闭. 考虑了一个容斥 发现不合法方案难以计算. 就算可以计算也几乎是n^2的做法. 考虑dp 左边会对右边产生影响 所以考虑先dp右边的再考虑左边的 ...
- 看了这篇文章,我搞懂了StringTable
好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star,更多文章请前往:目录导航 前言 String应该是Java ...
- html标签知识(无表单、表格)
<meta> : 定义在head中 <hgroup></hgroup> : 标题分组标签 <br>: 换行标签 ! : 空行 <p>< ...
- 【目标检测】:SPP-Net深入理解(从R-CNN到SPP-Net)
一. 导论 SPP-Net是何凯明在基于R-CNN的基础上提出来的目标检测模型,使用SPP-Net可以大幅度提升目标检测的速度,检测同样一张图片当中的所有目标,SPP-Net所花费的时间仅仅是RCNN ...
- Python编写的桌面图形界面程序实现更新检测和下载安装
在Python中我们有很多种方案来编写桌面图形用户界面程序,譬如内置的 Tkinter .强大的 PyQt5 和 PySide2 ,还有 wxPython .借助这些或内置或第三方的模块,我们可以轻松 ...
- URL中加号(+)转义问题
URL中加号(+)转义问题 前端通过URL传入一个参数,在后台日志中发现参数中的加号变成了空格. 前端传入a+b 后台日志a b 可以看到,+ 变成了空格. 先说结论 HTTP为了避免歧义,一些字符传 ...
- Java自学-图形界面 容器
Swing 的容器 JFrame和JDialog java的图形界面中,容器是用来存放 按钮,输入框等组件的. 窗体型容器有两个,一个是JFrame,一个是JDialog 步骤 1 : JFrame ...
- 2020-07-21:简述redis主从同步的过程。
福哥答案2020-07-21: 1.从服务发送一个sync同步命令给主服务要求全量同步.2.主服务接收到从服务的sync同步命令时,会fork一个子进程后台执行bgsave命令(非阻塞)快照保存,生成 ...
- 30分钟闲置服务器建站(gitlab为例)
前言 最近博主的阿里云主机又到了续费的时候了,刚买云主机的时候那是各种优惠各种打折,续费的时候只能当孙子了. 为了节省开支,又保证高性能的前提下,买了台10代NUC,内存和ssd自选,搭建一台个人服务 ...
- vue watch/ computed的应用(做一个简单的父子之间的传递/电话号码的搜索)
父组件中当点击搜索的时候请求接口,然后把新的数据用 computed 传递给子组件 <van-search v-model="onSeachPhone" show-actio ...