基于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简单程序读取串口信息的方法
Mar 13 Python
Python上传package到Pypi(代码简单)
Feb 06 Python
Python设计模式编程中解释器模式的简单程序示例分享
Mar 02 Python
pandas apply 函数 实现多进程的示例讲解
Apr 20 Python
解决PySide+Python子线程更新UI线程的问题
Jan 11 Python
Python为何不能用可变对象作为默认参数的值
Jul 01 Python
django组合搜索实现过程详解(附代码)
Aug 06 Python
python matplotlib库绘制条形图练习题
Aug 10 Python
python网络爬虫 Scrapy中selenium用法详解
Sep 28 Python
将tensorflow.Variable中的某些元素取出组成一个新的矩阵示例
Jan 04 Python
python设置表格边框的具体方法
Jul 17 Python
python字典按照value排序方法
Dec 28 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执行速率优化技巧小结
2008/03/15 PHP
Zend Framework框架之Zend_Mail实现发送Email邮件验证功能及解决标题乱码的方法
2016/03/21 PHP
CI框架整合widget(页面格局)的方法
2016/05/17 PHP
php写app接口并返回json数据的实例(分享)
2017/05/20 PHP
JavaScript分秒倒计时器实现方法
2015/02/02 Javascript
JS定义网页表单提交(submit)的方法
2015/03/20 Javascript
js实现黑色简易的滑动门网页tab选项卡效果
2015/08/31 Javascript
js重写方法的简单实现
2016/07/10 Javascript
AngularJS基础 ng-paste 指令简单示例
2016/08/02 Javascript
利用JS实现scroll自定义滚动效果详解
2017/10/17 Javascript
详解Angular-ui-BootStrap组件的解释以及使用
2018/07/13 Javascript
JavaScript中将值转换为字符串的五种方法总结
2019/06/06 Javascript
js计时事件实现圆形时钟
2020/03/25 Javascript
redux处理异步action解决方案
2020/03/22 Javascript
Vue自动构建发布脚本的方法示例
2020/07/24 Javascript
详解JS深拷贝与浅拷贝
2020/08/04 Javascript
Openlayers实现扩散的动态点(水纹效果)
2020/08/17 Javascript
vue 使用class创建和清除水印的示例代码
2020/12/25 Vue.js
[51:39]DOTA2-DPC中国联赛 正赛 Magma vs LBZS BO3 第二场 2月7日
2021/03/11 DOTA
Python  __getattr__与__setattr__使用方法
2008/09/06 Python
Python Tkinter GUI编程入门介绍
2015/03/10 Python
spyder常用快捷键(分享)
2017/07/19 Python
python技能之数据导出excel的实例代码
2017/08/11 Python
pytorch: tensor类型的构建与相互转换实例
2018/07/26 Python
keras 获取某层输出 获取复用层的多次输出实例
2020/05/23 Python
新西兰优惠网站:Treat Me
2019/07/04 全球购物
送给程序员的20个Java集合面试问题
2014/08/06 面试题
找工作最新求职信
2013/12/22 职场文书
中学生期末评语
2014/02/03 职场文书
高三毕业典礼主持词
2014/03/27 职场文书
初中升旗仪式演讲稿
2014/05/08 职场文书
保护环境建议书400字
2014/05/13 职场文书
十佳中学生事迹材料
2014/06/02 职场文书
2015学校年度工作总结
2015/05/11 职场文书
导游词之日本富士山
2020/01/06 职场文书
vue实现移动端div拖动效果
2022/03/03 Vue.js