基于python爬虫数据处理(详解)


Posted in Python onJune 10, 2017

一、首先理解下面几个函数

设置变量 length()函数 char_length() replace() 函数 max() 函数

1.1、设置变量 set @变量名=值

set @address='中国-山东省-聊城市-莘县';
select @address

1.2 、length()函数 char_length()函数区别

select length('a')
,char_length('a')
,length('中')
,char_length('中')

1.3、 replace() 函数 和length()函数组合

set @address='中国-山东省-聊城市-莘县';
select @address
,replace(@address,'-','') as address_1
,length(@address) as len_add1
,length(replace(@address,'-','')) as len_add2
,length(@address)-length(replace(@address,'-','')) as _count

etl清洗字段时候有明显分割符的如何确定新的数据表增加几个分割出的字段

计算出com_industry中最多有几个 - 符 以便确定增加几个字段 最大值+1 为可以拆分成的字段数 此表为3 因此可以拆分出4个行业字段 也就是4个行业等级

select max(length(com_industry)-length(replace(com_industry,'-',''))) as _max_count
from etl1_socom_data

1.4、设置变量 substring_index()字符串截取函数用法

set @address='中国-山东省-聊城市-莘县';
select 
substring_index(@address,'-',1) as china,
substring_index(substring_index(@address,'-',2),'-',-1) as province,
substring_index(substring_index(@address,'-',3),'-',-1) as city,
substring_index(@address,'-',-1) as district

1.5、条件判断函数 case when

case when then when then else 值 end as 字段名

select case when 89>101 then '大于' else '小于' end as betl1_socom_data

二、kettle转换etl1清洗

首先建表 步骤在视频里

字段索引 没有提 索引算法建议用BTREE算法增强查询效率

2.1.kettle文件名:trans_etl1_socom_data

2.2.包括控件:表输入>>>表输出

2.3.数据流方向:s_socom_data>>>>etl1_socom_data

基于python爬虫数据处理(详解)

kettle转换1截图

2.4、表输入2.4、SQL脚本 初步清洗com_district和com_industry字段

select a.*,
case when com_district like '%业' or com_district like '%织' or com_district like '%育' then null else com_district end as com_district1
,case when com_district like '%业' or com_district like '%织' or com_district like '%育' then concat(com_district,'-',com_industry) else com_industry end as com_industry_total
,replace(com_addr,'地 址:','') as com_addr1
,replace(com_phone,'电 话:','') as com_phone1
,replace(com_fax,'传 真:','') as com_fax1
,replace(com_mobile,'手机:','') as com_mobile1
,replace(com_url,'网址:','') as com_url1
,replace(com_email,'邮箱:','') as com_email1
,replace(com_contactor,'联系人:','') as com_contactor1
,replace(com_emploies_nums,'公司人数:','') as com_emploies_nums1
,replace(com_reg_capital,'注册资金:万','') as com_reg_capital1
,replace(com_type,'经济类型:','') as com_type1
,replace(com_product,'公司产品:','') as com_product1
,replace(com_desc,'公司简介:','') as com_desc1
from s_socom_data as a

2.5、表输出

基于python爬虫数据处理(详解)

表输出设置注意事项

注意事项:

① 涉及爬虫增量操作 不要勾选裁剪表选项

②数据连接问题 选择表输出中表所在的数据库

③字段映射问题 确保数据流中的字段和物理表的字段数量一致 对应一致

三、kettle转换etl2清洗

首先建表增加了4个字段 演示步骤在视频里

字段索引 没有提 索引算法建议用BTREE算法增强查询效率

主要针对etl1 生成的新的com_industry进行字段拆分 清洗

3.1.kettle文件名:trans_etl2_socom_data

3.2.包括控件:表输入>>>表输出

3.3.数据流方向:etl1_socom_data>>>>etl2_socom_data

注意事项:

① 涉及爬虫增量操作 不要勾选裁剪表选项

②数据连接问题 选择表输出中表所在的数据库

③字段映射问题 确保数据流中的字段和物理表的字段数量一致 对应一致

基于python爬虫数据处理(详解)

kettle转换2截图

3.4、SQL脚本 对com_industry进行拆分 完成所有字段清洗 注册资金字段时间关系没有进行细致拆解 调整代码即可

select a.*,
case 
#行业为''的值 置为空
when length(com_industry)=0 then null
#其他的取第一个-分隔符之前
else substring_index(com_industry,'-',1) end as com_industry1,
case 
when length(com_industry)-length(replace(com_industry,'-',''))=0 then null
#'交通运输、仓储和邮政业-' 这种值 行业2 也置为null
when length(com_industry)-length(replace(com_industry,'-',''))=1 and length(substring_index(com_industry,'-',-1))=0 then null
when length(com_industry)-length(replace(com_industry,'-',''))=1 then substring_index(com_industry,'-',-1)
else substring_index(substring_index(com_industry,'-',2),'-',-1)
end as com_industry2,
case 
when length(com_industry)-length(replace(com_industry,'-',''))<=1 then null
when length(com_industry)-length(replace(com_industry,'-',''))=2 then substring_index(com_industry,'-',-1)
else substring_index(substring_index(com_industry,'-',3),'-',-1)
end as com_industry3,
case 
when length(com_industry)-length(replace(com_industry,'-',''))<=2 then null
else substring_index(com_industry,'-',-1)
end as com_industry4
from etl1_socom_data as a

四、清洗效果质量检查

4.1爬虫数据源数据和网站数据是否相符

如果本身工作是爬虫和数据处理在一起处理,抓取的时候其实已经判断,此步骤可以省略,如果对接上游爬虫同事,这一步首先判断,不然清洗也是无用功,一般都要求爬虫同事存储请求的url便于后面数据处理查看数据质量

4.2计算爬虫数据源和各etl清洗数据表数据量

注:SQL脚本中没有经过聚合过滤 3个表数据量应相等

4.2.1、sql查询 下面表我是在同一数据库中 如果不在同一数据库 from 后面应加上表所在的数据库名称

不推荐数据量大的时候使用

select count(1) from s_socom_data
union all
select count(1) from etl1_socom_data
union all
select count(1) from etl2_socom_data

4.2.2 根据 kettle转换执行完毕以后 表输出总量对比

基于python爬虫数据处理(详解)

kettle表输出总数据量

4.3查看etl清洗质量

确保前两个步骤已经无误,数据处理负责的etl清洗工作自查开始 针对数据源清洗的字段 写脚本检查 socom网站主要是对地区 和行业进行了清洗 对其他字段做了替换多余字段处理 ,因此采取脚本检查,

找到page_url和网站数据进行核查

where里面这样写便于查看某个字段的清洗情况

select * 
from etl2_socom_data 
where com_district is null and length(com_industry)-length(replace(com_industry,'-',''))=3

http://www.socom.cn/company/7320798.html此页面数据和etl2_socom_data表最终清洗数据对比

基于python爬虫数据处理(详解)

网站页面数据

基于python爬虫数据处理(详解)

etl2_socom_data表数据

清洗工作完成。

以上这篇基于python爬虫数据处理(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中用pycurl监控http响应时间脚本分享
Feb 02 Python
python中反射用法实例
Mar 27 Python
Python的ORM框架中SQLAlchemy库的查询操作的教程
Apr 25 Python
浅谈python内置变量-reversed(seq)
Jun 21 Python
解决python大批量读写.doc文件的问题
May 08 Python
ubuntu17.4下为python和python3装上pip的方法
Jun 12 Python
Python unittest 简单实现参数化的方法
Nov 30 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
Oct 30 Python
Pytorch GPU显存充足却显示out of memory的解决方式
Jan 13 Python
tensorflow模型继续训练 fineturn实例
Jan 21 Python
利用 PyCharm 实现本地代码和远端的实时同步功能
Mar 23 Python
python try...finally...的实现方法
Nov 25 Python
python实现稀疏矩阵示例代码
Jun 09 #Python
Python实现数据库并行读取和写入实例
Jun 09 #Python
详解python之多进程和进程池(Processing库)
Jun 09 #Python
Python使用django搭建web开发环境
Jun 09 #Python
Python实现删除文件中含“指定内容”的行示例
Jun 09 #Python
Python实现两个list对应元素相减操作示例
Jun 09 #Python
Python实现向服务器请求压缩数据及解压缩数据的方法示例
Jun 09 #Python
You might like
PHP扩展迁移为PHP7扩展兼容性问题记录
2016/02/15 PHP
Windows上php5.6操作mongodb数据库示例【配置、连接、获取实例】
2019/02/13 PHP
javascript之更有效率的字符串替换
2008/08/02 Javascript
jquery 注意事项与常用语法小结
2010/06/07 Javascript
extjs实现选择多表自定义查询功能 前台部分(ext源码)
2011/12/20 Javascript
js前台判断开始时间是否小于结束时间
2012/02/23 Javascript
再谈querySelector和querySelectorAll的区别与联系
2012/04/20 Javascript
JS分页控件 可用于无刷新分页
2013/07/23 Javascript
javascript图片相似度算法实现 js实现直方图和向量算法
2014/01/14 Javascript
jQuery实现带渐显效果的人物多级关系图代码
2015/10/16 Javascript
Vue.js系列之项目结构说明(2)
2017/01/03 Javascript
Node.js中多进程模块Cluster的介绍与使用
2017/05/27 Javascript
基于vue2.0实现仿百度前端分页效果附实现代码
2018/10/30 Javascript
Vue2.0+Vux搭建一个完整的移动webApp项目的示例
2019/03/19 Javascript
微信小程序实现人脸识别登陆的示例代码
2019/04/02 Javascript
如何在微信小程序中存setStorage
2019/12/13 Javascript
vue+Element-ui前端实现分页效果
2020/11/15 Javascript
利用Vue实现简易播放器的完整代码
2020/12/30 Vue.js
[04:03]DOTA2英雄梦之声_第02期_风暴之灵
2014/06/30 DOTA
python中的闭包用法实例详解
2015/05/05 Python
Python Numpy:找到list中的np.nan值方法
2018/10/30 Python
详解如何用django实现redirect的几种方法总结
2018/11/22 Python
Python解析命令行读取参数之argparse模块
2019/07/26 Python
Python定时任务随机时间执行的实现方法
2019/08/14 Python
使用python的pyplot绘制函数实例
2020/02/13 Python
AJAX都有哪些有点和缺点
2012/11/03 面试题
怎样声明一个匿名的内部类
2016/06/01 面试题
幼儿如何来做好自我评价
2013/11/05 职场文书
大学生个人自我鉴定
2013/12/03 职场文书
2014年两会学习心得体会
2014/03/10 职场文书
网站创业计划书
2014/04/30 职场文书
土地转让协议书
2014/09/27 职场文书
校园游戏活动新闻稿
2014/10/15 职场文书
大学生团日活动总结
2015/05/06 职场文书
预备党员入党感想
2015/08/10 职场文书
2019如何书写演讲稿?
2019/07/01 职场文书