파 이 썬 html 내용 캡 처
그러나 포럼 에서 만 두 를 빼 앗 는 데 문제 가 있 습 니 다.아래층 댓 글 의 내용 은 모두 가 볼 수 있 는(관광객 포함)이기 때문에 대량의 이메일 주소 가 사람들 앞 에 노출 되 었 습 니 다.다음은 파 이 썬 으로 웹 페이지 에 있 는 이 이메일 주 소 를 캡 처 하고 파 이 썬 의 표준 라 이브 러 리 도 연습 해 보 겠 습 니 다.늙 은 새 는 길 을 돌아 가세 요)
관련 라 이브 러 리 는 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()
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JAVA 다 중 스 레 드 메커니즘 의 스 레 드 생 성target 을 실행 대상 으로 지정 한 name 을 이름 으로 하고 group 에서 참조 하 는 스 레 드 그룹의 일원 으로 새 Thread 대상 을 할당 합 니 다. 이 스 레 드 가 독립 된 Runnable 실...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.