首頁 > 後端開發 > Python教學 > Python爬蟲資料該怎麼處理?

Python爬蟲資料該怎麼處理?

PHP中文网
發布: 2017-06-20 16:27:57
原創
2528 人瀏覽過

一、先理解下面幾個函數

設定變數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欄位

<code class="sql"><span class="hljs-keyword">select a.*,<span class="hljs-keyword">case <span class="hljs-keyword">when com_district <span class="hljs-keyword">like <span class="hljs-string">&#39;%业&#39; <span class="hljs-keyword">or com_district <span class="hljs-keyword">like <span class="hljs-string">&#39;%织&#39; <span class="hljs-keyword">or com_district <span class="hljs-keyword">like <span class="hljs-string">&#39;%育&#39; <span class="hljs-keyword">then <span class="hljs-literal">null <span class="hljs-keyword">else com_district <span class="hljs-keyword">end <span class="hljs-keyword">as com_district1
,<span class="hljs-keyword">case <span class="hljs-keyword">when com_district <span class="hljs-keyword">like <span class="hljs-string">&#39;%业&#39; <span class="hljs-keyword">or com_district <span class="hljs-keyword">like <span class="hljs-string">&#39;%织&#39; <span class="hljs-keyword">or com_district <span class="hljs-keyword">like <span class="hljs-string">&#39;%育&#39; <span class="hljs-keyword">then <span class="hljs-keyword">concat(com_district,<span class="hljs-string">&#39;-&#39;,com_industry) <span class="hljs-keyword">else com_industry <span class="hljs-keyword">end <span class="hljs-keyword">as com_industry_total
,<span class="hljs-keyword">replace(com_addr,<span class="hljs-string">&#39;地 址:&#39;,<span class="hljs-string">&#39;&#39;) <span class="hljs-keyword">as com_addr1
,<span class="hljs-keyword">replace(com_phone,<span class="hljs-string">&#39;电 话:&#39;,<span class="hljs-string">&#39;&#39;) <span class="hljs-keyword">as com_phone1
,<span class="hljs-keyword">replace(com_fax,<span class="hljs-string">&#39;传 真:&#39;,<span class="hljs-string">&#39;&#39;) <span class="hljs-keyword">as com_fax1
,<span class="hljs-keyword">replace(com_mobile,<span class="hljs-string">&#39;手机:&#39;,<span class="hljs-string">&#39;&#39;) <span class="hljs-keyword">as com_mobile1
,<span class="hljs-keyword">replace(com_url,<span class="hljs-string">&#39;网址:&#39;,<span class="hljs-string">&#39;&#39;) <span class="hljs-keyword">as com_url1
,<span class="hljs-keyword">replace(com_email,<span class="hljs-string">&#39;邮箱:&#39;,<span class="hljs-string">&#39;&#39;) <span class="hljs-keyword">as com_email1
,<span class="hljs-keyword">replace(com_contactor,<span class="hljs-string">&#39;联系人:&#39;,<span class="hljs-string">&#39;&#39;) <span class="hljs-keyword">as com_contactor1
,<span class="hljs-keyword">replace(com_emploies_nums,<span class="hljs-string">&#39;公司人数:&#39;,<span class="hljs-string">&#39;&#39;) <span class="hljs-keyword">as com_emploies_nums1
,<span class="hljs-keyword">replace(com_reg_capital,<span class="hljs-string">&#39;注册资金:万&#39;,<span class="hljs-string">&#39;&#39;) <span class="hljs-keyword">as com_reg_capital1
,<span class="hljs-keyword">replace(com_type,<span class="hljs-string">&#39;经济类型:&#39;,<span class="hljs-string">&#39;&#39;) <span class="hljs-keyword">as com_type1
,<span class="hljs-keyword">replace(com_product,<span class="hljs-string">&#39;公司产品:&#39;,<span class="hljs-string">&#39;&#39;) <span class="hljs-keyword">as com_product1
,<span class="hljs-keyword">replace(com_desc,<span class="hljs-string">&#39;公司简介:&#39;,<span class="hljs-string">&#39;&#39;) <span class="hljs-keyword">as com_desc1<span class="hljs-keyword">from s_socom_data <span class="hljs-keyword">as a</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code><br/><br/><br/>
登入後複製

2.5、表輸出


表輸出設定注意事項


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

三、kettle轉換etl2清洗

首先建表增加了4個字段演示步驟在影片裡
字段索引沒有提索引演算法建議用BTREE演算法增強查詢效率

主要針對etl1產生的新的com_industry進行字段拆分清洗
3.1.kettle檔名:trans_etl2_socom_data
3.2.包括控制項:表輸入>>>表輸出
3.3.資料流方向:etl1_socom_data>>表輸出
3.3.資料流方向:etl1_socom_data>>表輸出
3.3.資料流方向:etl1_socom_data>>表輸出
3.3.資料流方向:etl1_socom_data>> ;>>etl2_socom_data
注意事項:

① 涉及爬蟲增量操作不要勾選裁剪表選項
②資料連接問題選擇表輸出中表所在的資料庫③字段映射問題確保資料流中的欄位和實體表的欄位數量一致對應一致

kettle轉換2截圖

3.4、SQL腳本對com_industry進行拆分完成所有欄位清洗註冊資金欄位時間關係沒有進行細緻拆解調整程式碼即可

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

四、清洗效果品質檢查

4.1爬蟲資料來源資料和網站資料是否相符

如果本身工作是爬蟲和資料處理在一起處理,抓取的時候其實已經判斷,此步驟可以省略,如果對接上游爬蟲同事,這一步首先判斷,不然清洗也是無用功,一般都要求爬蟲同事儲存請求的url便於後面資料處理查看資料品質

4.2計算爬蟲資料來源與各etl清洗資料表資料量


註:SQL腳本中沒有經過聚合過濾3個表格資料量應相等

4.2.1、sql查詢下面表我是在同一資料庫中如果不在同一資料庫from 後面應加上表格所在的資料庫名稱

不建議資料量大的時候使用
select count(1) from s_socom_dataunion all
select count(1) from etl1_socom_dataunion 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,&#39;-&#39;,&#39;&#39;))=3
登入後複製
此頁面數據和etl2_socom_data表最終清洗資料比較
網站頁面資料

etl2_socom_data表資料


清洗工作完成。

###學習過程中遇到什麼問題或想取得學習資源的話,歡迎加入學習交流群組###626062078,我們一起學Python! ###

以上是Python爬蟲資料該怎麼處理?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板