Python爬虫数据处理 - 狙击手+

jiaoyu121 2021-08-27 原文


Python爬虫数据处理

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

设置变量 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

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、表输出

表输出设置注意事项

注意事项:
① 涉及爬虫增量操作 不要勾选裁剪表选项
②数据连接问题 选择表输出中表所在的数据库
③字段映射问题 确保数据流中的字段和物理表的字段数量一致 对应一致

三、kettle转换etl2清洗

首先建表增加了4个字段 演示步骤在视频里
字段索引 没有提 索引算法建议用BTREE算法增强查询效率

主要针对etl1 生成的新的com_industry进行字段拆分 清洗
3.1.kettle文件名:trans_etl2_socom_data
3.2.包括控件:表输入>>>表输出
3.3.数据流方向:etl1_socom_data>>>>etl2_socom_data
注意事项:
① 涉及爬虫增量操作 不要勾选裁剪表选项
②数据连接问题 选择表输出中表所在的数据库
③字段映射问题 确保数据流中的字段和物理表的字段数量一致 对应一致

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转换执行完毕以后 表输出总量对比

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表最终清洗数据对比

网站页面数据

etl2_socom_data表数据

清洗工作完成。

学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入学习交流群
626062078,我们一起学Python!

发表于
2017-06-09 22:13 
狙击手+ 
阅读(2617
评论(0
编辑 
收藏 
举报

 

版权声明:本文为jiaoyu121原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/jiaoyu121/p/6973983.html

Python爬虫数据处理 - 狙击手+的更多相关文章

  1. Microchip ICD3 接口线定义 – dreamboy2000

    Microchip ICD3 接口线定义 2019-11-09 17:34  dreamboy2000  阅读 […]...

  2. 微信小程序 encryptedData 的解密(JAVA) – 詹姆斯世界第一

    微信小程序 encryptedData 的解密(JAVA) 上图为微信官方api提供的登陆获取用户信息的流程, […]...

  3. 常见面试题 – uestc2007

    常见面试题 http://www.51testing.com/html/88/n-4461688.html h […]...

  4. 滴滴专车又少了一个竞争对手,因为它死了 – 疯狂奔跑

    滴滴专车又少了一个竞争对手,因为它死了 滴滴专车又少了一个竞争对手,因为它死了 又一家公司倒闭了,又一家曾经辉 […]...

  5. 2015年传智播客JavaEE 第168期就业班视频教程day38-SSH综合案例-1 – 绿茵好莱坞

    2015年传智播客JavaEE 第168期就业班视频教程day38-SSH综合案例-1 为什么需要划分模块呢? […]...

  6. 软考项目管理考试常见问题答疑 – kody

    软考项目管理考试常见问题答疑     1.软考项目管理考试的主要用途有哪些? 第1个用途是用来评职称,具体的职 […]...

  7. javaWeb开发小工具–MyCommonUtils – 小李探花IU

    javaWeb开发小工具–MyCommonUtils MyCommonUtils 参考一些资料,写 […]...

  8. 远程桌面控制工具 — TeamViewer – 杯中水_F

    远程桌面控制工具 — TeamViewer      最近因货代使用我们系统时遇到一些问题,需要我 […]...

随机推荐

  1. 话说普通的TPlink ip地址是192.168.1.2 在LAN里有台电脑共享打印机 ip 是192.168.0.2 计算机名为j02 然后我把这台电脑加到DMZ里,让根路由器同一网段的可以访问 但添加打印机的时候 提示 计算机名重复 后来在需要添加打印机电脑的hosts文件里加了 192.168.1.2 j02 式了一样不行 话说,这个打印机该怎么添加

    开启端口映射,从外网访问内网的文件共享: 已经在路由器里开了远端WEB管理设了端口,另外端口映射局域网里的一台 […]...

  2. 日常管理随笔一

    作为管理,时间不短也不长,所感所悟略有所思,不敢讲做经验或什么理论,只作为日常随笔一记,算做茶余饭后偶谈一资且 […]...

  3. TortoiseSVN客户端重新设置用户名和密码 – 平凡故事

    TortoiseSVN客户端重新设置用户名和密码 2017-11-06 16:52  平凡故事  阅读(518 […]...

  4. 动手实现一个简单的 rpc 框架到入门 grpc (上)

    rpc 全称 Remote Procedure Call 远程过程调用,即调用远程方法。我们调用当前进程中的方 […]...

  5. 【LeetCode】23.合并K个排序链表

    题目描述 23.合并K个排序链表 合并k个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 示例: […]...

  6. ARP防火墙绑定网关MAC地址预防ARP攻击和P2P终结者

    【故障原理】  要了解故障原理,我们先来了解一下ARP协议。  在局域网中,通过ARP协议来完成IP地址转换为 […]...

  7. Webservice入门简单实例

    转载大神 项目目的: 程序A调用程序B中的方法C.. https://blog.csdn.net/lovebo […]...

  8. mysql应该了解的知识点

    数字类型 整数: tinyint、smallint、mediumint、int、bigint浮点数: floa […]...

展开目录

目录导航