파 이 썬 3 (11) 원생 파충류

4725 단어
파충류 사례
1. 원리: 텍스트 분석 및 정보 추출 - 정규 표현 식.
2. 인 스 턴 스 목적: 판다 TV 의 한 분류 아래 앵 커 의 인기 순위
                     사이트 구조 분석
동작: F12 HTML 정보 보기, Ctrl + Shift + C 마우스 선택 후 해당 하 는 HTML 을 찾 습 니 다.
 
3. 절차:
 
전주:
1. 명확 한 목적 (캡 처 목적 분석 캡 처 페이지 확인)
2. 데이터 대응 페이지 찾기
3. 웹 페이지 의 구 조 를 분석 하고 데이터 가 있 는 라벨 의 위 치 를 찾 습 니 다.
실행:
4. HTTP 요청 을 시 뮬 레이 션 하여 서버 에 요청 을 보 내 고 서버 에서 우리 에 게 돌아 오 는 HTML 을 가 져 옵 니 다.
5. 정규 표현 식 으로 우리 가 원 하 는 데 이 터 를 추출 합 니 다.
......
4. 코드
 
둘. VSCode 디 버 깅 코드
인 터 럽 트 디 버 깅: F5 시작, F10 단일 단계, F5 인 터 럽 트, F11 내부 진입
 
3. HTML 구조 분석 기본 원칙
캡 처 할 정 보 를 찾 을 수 있 도록 탭, 식별 자 를 찾 습 니 다.
1. 유일 성 을 가 진 라벨 선택
2. 데이터 에 가장 가 까 운 라벨 을 선택 합 니 다.
 
4. 데이터 추출 등급 분석 및 원칙
1. 두 데 이 터 를 한 그룹의 데이터 로 보고 탭 을 다시 찾 을 수 있 습 니 다.
2. 닫 을 수 있 는 탭 (부모 탭) 을 선택 하고 필요 한 데 이 터 를 감 싸 줍 니 다.
 
5. 정규 분석 HTML 및 구체 적 절차
 
'''
This is a spider,    
'''
 
 
from urllib import request
 
import re
 
 
 
class Spider():
 
    '''
    This is a spider class
    '''
 
    url = 'https://www.panda.tv/cate/lol'
 
    root_pattern = '
([\s\S]*?)
' #     #[\w\W] [\s\S] .     #* 0     #? ,
    name_pattern = '([\s\S]*?)'
    number_pattern = '([\s\S]*?)'
def __fetch_content(self):
    '''
    개인 적 인 방법, 웹 페이지 내용 가 져 오기
    '''
    r = request.urlopen(Spider.url)
    htmls = r.read()
    htmls = str(htmls,encoding = 'utf-8')
    return htmls
def __analysis(self,htmls):
    '''
    정규 표현 식 으로 데 이 터 를 추출 합 니 다.
    '''
    root_html = re.findall(Spider.root_pattern,htmls)
    anchors = []
    for html in root_html:
        name = re.findall(Spider.name_pattern,html)
        number = re.findall(Spider.number_pattern,html)
        anchor = {'name':name,'number':number}
        anchors.append(anchor)
    return anchors
def __refine(self,anchors):
    l = lambda anchor:{
    'name':anchor['name'][0].strip(),
    'number ': anchor [' number '] [0] \ # 목록 이 단일 문자열 로 바 뀌 었 습 니 다.
    }
    return map(l,anchors)
def __sort_seed(self,anchor):
    r = re. findall ('\ d *', anchor ['number']) \ # 숫자 추출
    number = float(r[0])
    if '만' in anchor ['number']: \ # 처리 '만'
        number *= 10000
        
    return number
def __sort(self,anchors):
    '''
    key 비교 대상 확인
    sorted () 기본 오름차 순 정렬, reverse = True 내림차 순
    str 로 정렬 할 수 없고 int 로 '만' 을 처리 해 야 합 니 다.
    '''
    anchors = sorted(anchors,key = self.__sort_seed,reverse = True)
    return anchors
def __show(self,anchors):
    for rank in range(0,len(anchors)):
        print('rank ' + str(rank + 1) +
    ':' + ' ' + anchors[rank]['name'] +
    '————' + anchors[rank]['number'])
def go (self): \ # Spider 의 입구 방법
    htmls = self.__fetch_content()
    anchors = self.__analysis(htmls)
    anchors = list(self.__refine(anchors))
    anchors = self.__sort(anchors)
    self.__show(anchors)
spider = Spider()
spider.go()
파충류 의 틀:
Beautiful Soup
Scrapy

좋은 웹페이지 즐겨찾기