python 파충류 신기 Pyppeter 입문 및 사용

5957 단어 python파충pyppeteer
머리말
selenium 하면 모두 가 낯 설 지 않 을 것 입 니 다.유명한 웹 자동화 테스트 프레임 워 크 로 서 selenium 은 여러 가지 주류 브 라 우 저 를 지원 하고 기능 이 풍부 한 API 인 터 페 이 스 를 제공 하여 파충류 도구 로 자주 사용 되 고 있 습 니 다.그러나 selenium 의 단점 도 뚜렷 하 다.예 를 들 어 속도 가 너무 느 리 고 버 전 설정 에 대한 요구 가 엄격 하 며 가장 번 거 로 운 것 은 해당 하 는 구동 을 자주 업데이트 하 는 것 이다.
오늘 은 또 다른 웹 자동화 테스트 도구 인 Pyppeter 를 소개 합 니 다.지원 하 는 브 라 우 저 는 단일 하지만 설치 설정 의 편의 성과 운영 효율 에 있어 서 는 selenium 보다 훨씬 좋 습 니 다.
01.Pyppeter 프로필
Pyppeter 를 소개 하기 전에 Puppeteer 를 말씀 드 리 겠 습 니 다.Puppeteer 는 구 글 이 만 든 Node.js 를 기반 으로 개발 한 도구 입 니 다.주로 Chrome 브 라 우 저의 API 를 조작 하고 자바 script 코드 를 통 해 Chrome 브 라 우 저 를 조작 하 며 데이터 추출,웹 프로그램 자동 테스트 등 임 무 를 수행 합 니 다.
Pyppeter 는 사실 Puppeter 의 Python 버 전 입 니 다.다음은 Pyppeter 의 두 가지 특징,chromium 브 라 우 저 와 asyncio 프레임 워 크 를 간단하게 소개 합 니 다.
1).chromium
Chromium 은 독립 된 브 라 우 저 로 Google 이 자체 브 라 우 저 인 Google Chrome 을 개발 하기 위해 시작 한 프로그램 으로 Chrome 의 실험 판 에 해당 합 니 다.Chromium 은 Chrome 보다 안정성 이 떨 어 지지 만 기능 이 더욱 풍부 하고 업데이트 속도 가 빨 라 보통 몇 시간 마다 새로운 개발 버 전이 발 표 됩 니 다.
Pyppeter 의 웹 자동 화 는 chromium 을 기반 으로 이 루어 집 니 다.chromium 의 일부 특성 때문에 Pyppeter 의 설치 설정 은 매우 간단 합 니 다.이 점 에 대해 서 는 잠시 후에 자세히 소개 하 겠 습 니 다.
2).asyncio
asyncio 는 Python 의 비동기 협 정 라 이브 러 리 입 니 다.3.4 버 전에 서 도 입 된 표준 라 이브 러 리 에서 비동기 IO 에 대한 지원 이 직접 내장 되 어 있 습 니 다.Python 의 가장 야심 찬 라 이브 러 리 라 고 불 리 며 홈 페이지 에 상세 한 소개 가 있 습 니 다.

02.설치 및 사용
1).미니 멀 설치
pip install pyppeter 명령 을 사용 하면 pyppeter 라 이브 러 리 의 설 치 를 완료 할 수 있 습 니 다.chromium 브 라 우 저 는 pyppeter-install 명령 하나만 있 으 면 해당 하 는 최신 버 전의 chromium 브 라 우 저 를 pyppeter 의 기본 위치 로 자동 으로 다운로드 합 니 다.
pyppeter-install 명령 을 실행 하지 않 으 면 pyppeter 를 처음 사용 할 때 도 chromium 브 라 우 저 를 자동 으로 다운로드 하고 설치 합 니 다.효 과 는 같 습 니 다.전체적으로 말 하면 pyppeter 는 selenium 보다 driver 설정 의 절 차 를 줄 였 다.
물론 어떤 이유 로 chromium 자동 설치 가 제대로 이 루어 지지 않 을 수도 있 습 니 다.이 럴 때 수 동 설 치 를 고려 할 수 있 습 니 다.우선 다음 사이트 에서 자신의 시스템 에 대응 하 는 버 전 을 찾 아 chromium 압축 패 키 지 를 다운로드 할 수 있 습 니 다.
  • 'linux': 'https://storage.googleapis.com/chromium-browser-snapshots/Linux_x64/575458/chrome-linux.zip'
  • 'mac': 'https://storage.googleapis.com/chromium-browser-snapshots/Mac/575458/chrome-mac.zip '
  • 'win32': 'https://storage.googleapis.com/chromium-browser-snapshots/Win/575458/chrome-win32.zip'
  • 'win64': 'https://storage.googleapis.com/chromium-browser-snapshots/Win_x64/575458/chrome-win32.zip'
  • 그리고 압축 패 키 지 를 pyppeter 의 지정 한 디 렉 터 리 에 압축 을 풀 고 windows 시스템 의 기본 디 렉 터 리 입 니 다.다른 시스템 의 기본 디 렉 터 리 는 아래 그림 을 참조 할 수 있 습 니 다.

    2).사용
    설치 가 끝나 면 효 과 를 시험 해 보 세 요.아래 코드 를 살 펴 보 겠 습 니 다.main 함수 에서 먼저 브 라 우 저 대상 을 만 든 다음 에 새로운 탭 페이지 를 열 고 바 이 두 홈 페이지 를 방문 하여 현재 페이지 를 캡 처 하고'example.png'로 저장 한 다음 브 라 우 저 를 닫 습 니 다.앞에서 도 언급 했 듯 이 pyppeter 는 asyncio 를 기반 으로 구축 되 었 기 때문에 사용 할 때 async/await 구 조 를 사용 해 야 합 니 다.

    위의 코드 를 실행 하면 브 라 우 저 팝 업 이 실행 되 지 않 은 것 을 발견 할 수 있 습 니 다.Pyppeter 는 기본적으로 헤드 없 는 브 라 우 저 를 사용 하기 때 문 입 니 다.브 라 우 저 를 표시 하려 면 launch 함수 에 인자"headless=False"를 설정 해 야 합 니 다.프로그램 실행 이 끝 난 후 같은 디 렉 터 리 에서 캡 처 된 웹 페이지 그림 이 나타 납 니 다.

    03.실전 비동기 기금 탈취
    앞에서 말 했 듯 이 Pyppeter 는 매우 효율 적 인 웹 자동화 테스트 도구 입 니 다.그 본질 적 인 원인 은 Pyppeter 가 asyncio 를 바탕 으로 구축 되 었 기 때 문 입 니 다.그의 모든 속성 과 방법 은 거의 coroutine 대상 이기 때문에 비동기 프로그램 을 구축 할 때 매우 편리 하고 타고 난 비동기 운행 을 지원 합 니 다.
    순서 집행 과 비동기 운행 의 효율 을 비교 해 보 자.
    1).펀드 탈취
    우 리 는 매일 펀드 네트워크 의 개방 식 펀드 의 순가치 데 이 터 를 이번 실험 임무 로 삼 았 다.아래 그림 은 펀드 의 역사적 순가치 데이터 이다.이 페이지 는 js 로 불 러 온 것 이기 때문에 requests 를 통 해 내용 정 보 를 직접 얻 을 수 없 기 때문에 모 의 브 라 우 저 조작 방식 으로 데이터 캡 처 를 하 는 것 을 고려 할 수 있다.(사실상 펀드 순가치 데이터 의 획득 은 API 인터페이스 가 있 는데 이번 임 무 는 단지 시범 을 보이 기 위 한 것 일 뿐 실 용적 가치 가 없다)

    효 과 를 더욱 뚜렷하게 하기 위해 서 우 리 는 이번에 펀드 목록 페이지(아래 그림)앞의 50 개 펀드 의 최근 20 거래 일의 순가치 데 이 터 를 얻 었 다.

    2).순서 집행
    프로그램 구축 의 기본 적 인 사고방식 은 브 라 우 저 브 라 우 저 와 페이지 페이지 페이지 를 새로 만 들 고 각 펀드 의 순가치 데이터 페이지 를 순서대로 방문 하여 데 이 터 를 추출 하 는 것 이다.핵심 코드 는 다음 과 같 습 니 다.

    코드 중의 getdata()함 수 는 순 값 데이터 페이지 분석 과 데이터 전환 에 사 용 됩 니 다.getall_codes()함 수 는 모든 오픈 펀드 의 펀드 코드(총 6000 여 개)를 얻 는 데 사 용 됩 니 다.프로그램 도 async/await 구 조 를 사 용 했 지만 여러 펀드 의 순 가 데 이 터 를 얻 는 것 은 모두 callurl 입 니 다.and_getdata()함수 에서 순서대로 실 행 된 이 유 는 pyppeter 의 방법 이 모두 coroutine 대상 이기 때문에 이러한 형식 으로 프로그램 을 구축 해 야 합 니 다.
    브 라 우 저 를 여 는 데 걸 리 는 시간 방 해 를 제거 하기 위해 서,방문 페이지 와 데이터 캡 처 에 사용 되 는 시간 만 집계 합 니 다.그 결 과 는:12.08 초 입 니 다.
    3)비동기 실행
    다음은 프로그램 을 개조 합 니 다.기능 함수 가 변 하지 않 습 니 다.주로 fundlist 의 순환 운행 을 async 의 task 대상 으로 바 꿉 니 다.핵심 코드 는 다음 과 같 습 니 다.

    시간 이 걸 리 는 통계 구간 은 브 라 우 저가 열 린 후에 도 계산 되 며,실행 시간 은 2.18 초 로 순서대로 실행 하 는 것 보다 6 배 빠르다.기어 올 라 가 야 할 작업량 이 많 고 순서 집행 에 10 시간 이 걸 리 면 비동기 집행 은 2 시간 도 안 걸 릴 수 있어 최적화 효과 가 뚜렷 하 다 고 상상 할 수 있다.
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기