>  기사  >  백엔드 개발  >  Python 크롤러 데이터는 어떻게 처리되어야 합니까?

Python 크롤러 데이터는 어떻게 처리되어야 합니까?

PHP中文网
PHP中文网원래의
2017-06-20 16:27:572474검색

1. 먼저 다음 함수를 이해하세요

변수 길이 설정() 함수 char_length() 대체() 함수 max() 함수
1.1 변수 설정 @variable name=value

set @address='中国-山东省-聊城市-莘县';select @address

1.2, length() 함수 char_length ( ) 함수 차이

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

1.3, replacement() 함수와 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은 분할할 수 있는 필드 수이므로 4개의 산업 필드를 분할할 수 있습니다. level

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. 조건부 판단 함수 케이스 when then when else 값은 필드 이름으로 종료됩니다

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

2. 테이블 생성 단계는 영상에 있습니다

필드 인덱스 인덱스 알고리즘은 언급되지 않습니다. 쿼리 효율성을 높이기 위해 BTREE 알고리즘을 사용하는 것이 좋습니다

2.1.kettle 파일 이름: trans_etl1_socom_data
2.2 포함 컨트롤: 테이블 입력>>> ; 테이블 출력

2.3. 데이터 흐름 방향: s_socom_data>>>> ;etl1_socom_data



kettle 변환 1 스크린샷
2.4, 테이블 입력 2.4, com_district 및 com_industry 필드의 SQL 스크립트 예비 정리
<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 , 테이블 출력

테이블 출력 설정 참고
주의 사항:
① 크롤러 증분 작업이 포함될 때 컷 테이블 옵션을 선택하지 마세요

② 데이터 연결 문제 테이블 출력의 테이블이 있는 데이터베이스를 선택하세요.
③ 필드 매핑 문제 데이터 스트림의 필드 수가 물리적 테이블의 필드 수와 일치하는지 확인하세요

3. Kettle을 etl2 cleaning으로 변환

먼저 테이블을 만들고 4개의 필드를 추가하여 동영상의 단계

필드 인덱스에는 인덱스 알고리즘이 언급되어 있지 않습니다. 쿼리 효율성을 높이기 위해 BTREE 알고리즘을 사용하는 것이 좋습니다

주로 etl1
3.1.kettle에서 생성된 새 com_industry에서 필드 분할 및 정리를 수행합니다. 파일 이름: trans_etl2_socom_data

3.2. 포함 제어: 테이블 입력>>>테이블 출력

3.3. 데이터 흐름 방향: etl1_socom_data>>>etl2_socom_data
참고:
1 크롤러 증분과 관련됨 작업 중에는 테이블 잘라내기 옵션을 확인하지 마세요. 연결 문제 테이블 출력의 테이블이 위치한 데이터베이스 선택
③필드 매핑 문제 데이터 흐름과 물리적 테이블의 필드 수가 일치하는지 확인



kettle 변환 2 스크린샷

3.4. 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. 정리 효과의 품질 검사

4.1 크롤러 데이터 소스 데이터가 웹 사이트 데이터와 일치하는지 여부

자신의 작업이 크롤러와 데이터 처리를 함께 처리하는 것이고 크롤링 시 이미 판단이 이루어진 경우에는 이 단계를 생략할 수 있습니다. 업스트림 크롤러 동료와 연결하는 경우 이 단계를 먼저 판단해야 합니다. 그렇지 않으면 청소가 진행됩니다. 일반적으로 크롤러 동료는 요청을 저장해야 합니다. URL은 데이터 품질을 확인하기 위한 후속 데이터 처리에 편리합니다

4.2 크롤러 데이터 소스와 각 ETL 정리 데이터 테이블의 데이터 볼륨을 계산합니다. SQL 스크립트에서 집계 및 필터링되지 않은 세 테이블의 데이터 볼륨은 동일해야 합니다

4.2.1, sql 쿼리 아래 테이블은 동일한 데이터베이스에 있는 경우 동일한 데이터베이스에 있습니다. 테이블이 위치한 데이터베이스는 데이터 양이 많은 경우에는 사용하지 않는 것이 좋습니다. 4.2.2 주전자 변환이 완료된 후 테이블의 전체 출력 비교

케틀 테이블에서 출력되는 전체 데이터량


4.3 ETL 클리닝 품질 확인

처음 두 단계가 올바른지 확인하세요. 데이터 처리를 담당하는 ETL 클리닝 작업의 자체 점검은 스크립트를 작성하는 것부터 시작됩니다. 데이터 소스에 의해 정리된 필드를 socom 웹사이트에서 확인하세요. 지역 및 업종이 정리되었으며, 다른 필드는 중복된 필드로 대체되었습니다. 따라서 확인을 위해
page_url 및 웹사이트 데이터를 찾으세요. 어디에 이렇게 작성하면 특정 필드의 정리 상태를 쉽게 확인할 수 있습니다
select count(1) from s_socom_dataunion all
select count(1) from etl1_socom_dataunion all
select count(1) from etl2_socom_data

이 페이지 데이터 etl2_socom_data 테이블의 최종 정리 데이터와 비교

웹사이트 페이지 데이터


etl2_socom_data 테이블 data

청소 작업이 완료되었습니다.
학습 과정에서 문제가 발생하거나 학습 리소스를 얻고 싶다면 학습 교류 그룹에 가입하세요.
626062078, 함께 Python을 배워보세요!

위 내용은 Python 크롤러 데이터는 어떻게 처리되어야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:쇼핑몰 쓰기(1)다음 기사:쇼핑몰 쓰기(1)