파 이 썬 html 내용 캡 처

오늘 WPS For Linux 알파 7 이 발표 되 었 습 니 다.우선 WPS 팀 의 노력 에 감 사 드 립 니 다.포럼 에서 만 두 를 빼 앗 는 떠들썩 함 에 내년 베타 가 기대 되 고 있 습 니 다.
그러나 포럼 에서 만 두 를 빼 앗 는 데 문제 가 있 습 니 다.아래층 댓 글 의 내용 은 모두 가 볼 수 있 는(관광객 포함)이기 때문에 대량의 이메일 주소 가 사람들 앞 에 노출 되 었 습 니 다.다음은 파 이 썬 으로 웹 페이지 에 있 는 이 이메일 주 소 를 캡 처 하고 파 이 썬 의 표준 라 이브 러 리 도 연습 해 보 겠 습 니 다.늙 은 새 는 길 을 돌아 가세 요)
관련 라 이브 러 리 는 http.client(HTTP 처리),re(정규 표현 식),threading(다 중 스 레 드)이 있 습 니 다.
  
우선,웹 페이지 의 내용 을 캡 처 하려 면 html 페이지 를 먼저 받 아야 합 니 다.http.client.HTTPConnection 은 이 일 을 하 는 데 쓰 인 다.http.client.HTTPConnection 의 구조 함수 에서 host 는 웹 서버 주 소 를 가리 키 고 port 는 포트(기본 80)를 가리킨다.
그 중에서 다음 과 같은 몇 가지 형식의 효 과 는 같다.
  >>> h1 = http.client.HTTPConnection('www.cwi.nl')
  >>> h2 = http.client.HTTPConnection('www.cwi.nl:80')
  >>> h3 = http.client.HTTPConnection('www.cwi.nl', 80)
  
구조 함 수 는 현재 http 연결 을 대표 하 는 HTTP Connection 대상 을 되 돌려 줍 니 다.그리고 이 HTTPConnection 대상 으로 요청 페이지 를 보 낼 수 있 습 니 다.request 의 네 가지 매개 변수 method,url,body, 헤 더 스 는 잘 모 르 겠 어 요.이해 하기 쉬 워 요.그러나 여기 서 주의해 야 할 것 은 headers 는 dict 입 니 다.header 의 속성 과 값 을 각각 key:value 형식 으로 dict 에 저장 하면 됩 니 다.또한 cookies 를 배달 하려 면 headers 에 직접 넣 으 면 됩 니 다.
request 를 보 낸 후 getresponse 방법 으로 페이지 응답 을 얻 을 수 있 습 니 다.getresponse 는 http 의 response 를 대표 하 는 HTTP Response 대상 을 되 돌려 줍 니 다.이 HTTP Response 대상 에는 response 의 머리,내용,상태 코드 등 이 포함 되 어 있 습 니 다.HTTP Response 의 read 방법 을 통 해 html 페이지 를 읽 을 수 있 습 니 다.Python 3 의 read 방법 은 bytes 대상 을 되 돌려 줍 니 다.decode 를 사용 해 야 다음 정규 표현 식 과 일치 할 수 있 습 니 다.
  
웹 페이지 의 내용 이 있 으 면 이어서 내용 의 해석 을 할 수 있다.Python 은 html 페이지 요 소 를 해석 하 는 라 이브 러 리 가 많 습 니 다.예 를 들 어 BeautifulSoup,pyQuery,정규 표현 식 등 이 있 습 니 다.여기 서 정규 표현 식 을 선 택 했 습 니 다.정규 표현 식 에 관 한 문법 은 다음 두 편의 글 을 참고 하여 상세 하 게 설명 할 수 있 습 니 다.Python 정규 표현 식 조작 지침,정규 표현 식 30 분 입문 튜 토리 얼 입 니 다.파 이 썬 의 정규 표현 식 모듈 re 의 용법 을 말씀 드 리 겠 습 니 다.
re 모듈 은 정규 표현 식 을 사용 하 는 데 두 가지 용법 이 있 습 니 다.효과 가 많 지 않 습 니 다.re 의 함 수 를 직접 사용 하고 re.copile 로 regex 대상 으로 컴 파일 한 후에 사용 합 니 다.그냥 뒤에 효율 이 높 아 요.대체 절 차 는 다음 과 같다.
search 함 수 를 통 해 match 대상 을 얻 고 이 match 대상 을 통 해 group/groups 함 수 를 호출 하여 결 과 를 얻 는 그룹 입 니 다.
findall 로 pattern 이 존재 하 는 지 직접 검색 할 수도 있 습 니 다.
  
단일 스 레 드 가 너무 느 려 서 다 중 스 레 드(threading 모듈)를 켜 서 속 도 를 냅 니 다.여 기 는 주로 threading.Thread 를 통 해 스 레 드 를 만 듭 니 다.threading.Thread 의 구조 함수 에서 target 은 워 커 함수 대상 이 고 스 레 드 의 실행 논리 입 니 다.args 는 worker 함수 에 전 달 된 매개 변 수 를 tupple 로 표시 합 니 다.kwargs 도 worker 에 게 파 라 메 터 를 전달 할 수 있 습 니 다.이것 은 dict 일 뿐 입 니 다.매개 변수 이름:매개 변수 값 이 맞습니다.
start 방법 으로 만 든 스 레 드 를 시작 합 니 다.join 방법 은 스 레 드 가 종 료 될 때 까지 기 다 립 니 다.이 프로그램 은 스 레 드 간 의 동기 화 를 필요 로 하지 않 기 때문에 상호 배척 량,신 호 량 과 같은 동기 화 체 제 를 소개 하지 않 았 습 니 다.필요 한 독자 가 있 으 면 공식 문 서 를 참고 하 십시오.
코드:
#!/usr/bin/env python3

import http.client
import re
import threading

pattern = re.compile(r'(?<=<a href="mailto:)[\w\W]*(?=">)')

def Parse(data, fp):
    lines = data.split('\r
') for line in lines: match = pattern.search(line) if(match): email = match.group(0) print(email) fp.write(email + '
') def worker(begin, end, No): print('Thread %d initiated.' % No) conn = http.client.HTTPConnection('bbs.wps.cn') url = '/thread-22351621-%d-1.html' index = begin fp = open('email%02d.txt' % No, 'a') while(index < end): conn.request('GET', url % index) try: res = conn.getresponse() except Exception: continue print('Thread %d: %d, %s' % (No, res.status, url % index)) if(res.status == 200): Parse(res.read().decode('utf8'), fp) index += 1 fp.close() total = 10 step = 180 / total threads = [threading.Thread(target=worker, args=(i * step, i + step, i)) for i in range(total)] for thread in threads: thread.start() for thread in threads: thread.join()

좋은 웹페이지 즐겨찾기