Python爬蟲數據處理

1、首先理解下面幾個函數

設置變量 length()函數 char_length() replace() 函數 max() 函數
1.一、設置變量 set @變量名=值html

set @address='中國-山東省-聊城市-莘縣'; select @address

1.2 、length()函數 char_length()函數區別nginx

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

1.三、 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清洗字段時候有明顯分割符的如何肯定新的數據表增長几個分割出的字段sql

計算出com_industry中最多有幾個 - 符 以便肯定增長几個字段 最大值+1 爲能夠拆分紅的字段數 此表爲3 所以能夠拆分出4個行業字段 也就是4個行業等級數據庫

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

1.四、設置變量 substring_index()字符串截取函數用法api

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.五、條件判斷函數 case when
case when then when then else 值 end as 字段名數組

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

2、kettle轉換etl1清洗

首先建表 步驟在視頻裏
字段索引 沒有提 索引算法建議用BTREE算法加強查詢效率函數

2.1.kettle文件名:trans_etl1_socom_data
2.2.包括控件:表輸入>>>表輸出
2.3.數據流方向:s_socom_data>>>>etl1_socom_data學習


kettle轉換1截圖

2.四、表輸入2.四、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.五、表輸出


表輸出設置注意事項


注意事項:
① 涉及爬蟲增量操做 不要勾選裁剪表選項
②數據鏈接問題 選擇表輸出中表所在的數據庫
③字段映射問題 確保數據流中的字段和物理表的字段數量一致 對應一致

3、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.四、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、清洗效果質量檢查

4.1爬蟲數據源數據和網站數據是否相符

若是自己工做是爬蟲和數據處理在一塊兒處理,抓取的時候其實已經判斷,此步驟能夠省略,若是對接上游爬蟲同事,這一步首先判斷,否則清洗也是無用功,通常都要求爬蟲同事存儲請求的url便於後面數據處理查看數據質量

4.2計算爬蟲數據源和各etl清洗數據表數據量

注:SQL腳本中沒有通過聚合過濾 3個表數據量應相等

4.2.一、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!

相關文章
相關標籤/搜索