基于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 的 with 语句详解
Jun 13 Python
零基础写python爬虫之爬虫编写全记录
Nov 06 Python
python编程开发之类型转换convert实例分析
Nov 13 Python
利用Django内置的认证视图实现用户密码重置功能详解
Nov 24 Python
python初学之用户登录的实现过程(实例讲解)
Dec 23 Python
python3利用ctypes传入一个字符串类型的列表方法
Feb 12 Python
纯python进行矩阵的相乘运算的方法示例
Jul 17 Python
基于numpy中的expand_dims函数用法
Dec 18 Python
Python使用shutil模块实现文件拷贝
Jul 31 Python
详解BeautifulSoup获取特定标签下内容的方法
Dec 07 Python
Python实现的扫码工具居然这么好用!
Jun 07 Python
如何利用Python实现n*n螺旋矩阵
Jan 18 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 魔术变量和魔术函数详解
2015/02/25 PHP
PHP的Yii框架中创建视图和渲染视图的方法详解
2016/03/29 PHP
PHP实现搜索时记住状态的方法示例
2018/05/11 PHP
jQuery 扩展对input的一些操作方法
2009/10/30 Javascript
利用JQuery的load函数动态加载其它页面的内容的实现代码
2010/12/14 Javascript
重载toString实现JS HashMap分析
2011/03/13 Javascript
jquery ajax 简单范例(界面+后台)
2013/11/19 Javascript
使用Nodejs开发微信公众号后台服务实例
2014/09/03 NodeJs
js怎么覆盖原有方法实现重写
2014/09/04 Javascript
JavaScript实现函数返回多个值的方法
2015/06/09 Javascript
Javascript技术难点之apply,call与this之间的衔接
2015/12/04 Javascript
javascript中eval解析JSON字符串
2016/02/27 Javascript
javascript解决小数的加减乘除精度丢失的方案
2016/05/31 Javascript
JS实现对中文字符串进行utf-8的Base64编码的方法(使其与Java编码相同)
2016/06/21 Javascript
javascript数组去重常用方法实例分析
2017/04/11 Javascript
nodejs6下使用koa2框架实例
2017/05/18 NodeJs
Vue组件通信之Bus的具体使用
2017/12/28 Javascript
vue项目webpack中Npm传递参数配置不同域名接口
2018/06/15 Javascript
深入理解 Koa 框架中间件原理
2018/10/18 Javascript
微信小程序实现横向滚动导航栏效果
2019/12/12 Javascript
python操作gmail实例
2015/01/14 Python
利用scrapy将爬到的数据保存到mysql(防止重复)
2018/03/31 Python
TensorFlow实现简单卷积神经网络
2018/05/24 Python
Windows下将Python文件打包成.EXE可执行文件的方法
2018/08/03 Python
python多线程并发让两个LED同时亮的方法
2019/02/18 Python
Python 中如何实现参数化测试的方法示例
2019/12/10 Python
pytorch进行上采样的种类实例
2020/02/18 Python
解决Keras的自定义lambda层去reshape张量时model保存出错问题
2020/07/01 Python
利用Python的folium包绘制城市道路图的实现示例
2020/08/24 Python
高清屏下canvas重置尺寸引发的问题的解决
2019/10/14 HTML / CSS
日本热销NO.1胶原蛋白冻:Aishitoto爱希特多
2019/06/20 全球购物
德国2018年度最佳在线药房:Bodfeld Apotheke
2019/11/04 全球购物
超市后勤自我鉴定
2014/01/17 职场文书
2014年党员评议表自我评价
2014/09/27 职场文书
领导干部群众路线剖析材料
2014/10/09 职场文书
学校拾金不昧表扬信
2015/01/16 职场文书