Python 파충류 포럼 키워드 캡 처 과정 분석
이전에 python 파충류 의 기본 지식 을 배 웠 는데,지금 은 파충류 로 실제 데이터 통계 기능 을 할 계획 이다.얼마 전 배우 의 탄생 으로 젊 은 실력 파 배우 몇 명 이 불 을 붙 였 기 때문에 파충류 프로그램 으로 한 포럼 에서 어떤 배우 에 대한 토론 열 기 를 검색 하고 날짜 에 따라 매일 토론 량 을 집계 하려 고 했다.
이 항목 은 모두 두 단계 로 나 뉜 다.
1.모든 댓 글 의 링크 가 져 오기:
최근 한 달 간 의 게시 물 링크 를 배열 에 저장 합 니 다.
2.댓 글 에서 배우 이름 찾기:
배열 에서 링크 를 열 고 이 링크 의 모든 댓 글 을 꺼 내 댓 글 에서 배우 의 이름 을 찾 습 니 다.
모든 댓 글 의 링크 가 져 오기:
검색 범 위 는 여전히 호랑이 가 영화 와 드라마 를 덮 치 는 것 을 경계 로 한다.호 포 영화 구 는 하루 에 약 5000 개의 댓 글 을 달 고 1 월 에 15 만 개가 넘 는 댓 글 을 달 아 샘플 로 도 작 지 않 아 참고 가치 가 있다.
이 절 차 를 완성 하면 주로 다음 과 같은 몇 단계 로 나 뉜 다.
1.현재 날짜 가 져 오기
2.30 일 전 날짜 가 져 오기
3.첫 페이지 에서 뒤로 넘 긴 모든 댓 글 링크 기록
1.현재 날짜 가 져 오기
여기 서 우 리 는 datetime 모듈 을 사용 했다.datetime.datetime.now()를 사용 하면 현재 날짜 정보 와 시간 정 보 를 얻 을 수 있 습 니 다.이 항목 에 서 는 날짜 정보 만 사용 하면 됩 니 다.
2.30 일 전 날짜 가 져 오기
datetime 모듈 을 사용 하 는 장점 은 시간 차 를 스스로 계산 할 수 있 는 좋 은 함수 가 있다 는 것 이다.주어진 매개 변수 days=30 시 30 일의 시간 차 가 생 성 되 고 현재 날짜 로 dela 를 빼 면 30 일 전의 날 짜 를 얻 을 수 있 으 며 이 날 짜 를 startday 로 저장 하면 통 계 를 시작 하 는 날짜 입 니 다.그렇지 않 으 면 시간 차 를 계산 하려 면 윤년 을 뛰 어 넘 는 등 요 소 를 스스로 고려 해 야 비교적 복잡 한 함 수 를 통 해 완성 할 수 있다.
today = datetime.datetime.now()
delta = datetime.timedelta(days=30)
i = "%s" %(today - delta)
startday = i.split(' ')[0]
today = "%s" %today
today = today.split(' ')[0]
시작 날짜 와 종료 날 짜 를 얻 은 후에 도 매일 모든 사람의 토론 수 를 기록 해 야 하기 때문에 이 두 날짜 에 따라 두 개의 사전 을 생 성 합 니 다.각각 actor 1 입 니 다.dict 와 actor 2dict。사전 은 날 짜 를 키 로 하고 당일 토론 수 를 value 로 하여 검색 기록 을 추가 할 때마다 해당 하 는 value 값 을 업데이트 할 수 있 습 니 다.
strptime, strftime = datetime.datetime.strptime, datetime.datetime.strftime
days = (strptime(today, "%Y-%m-%d") - strptime(startday, "%Y-%m-%d")).days
for i in range(days+1):
temp = strftime(strptime(startday, "%Y-%m-%d") + datetime.timedelta(i), "%Y-%m-%d")
actor1_dict[temp] = 0
actor2_dict[temp] = 0
3.첫 페이지 에서 뒤로 넘 긴 모든 댓 글 링크 기록
그림 1 에서 보 듯 이 댓 글 순 으로 배열 하면 모든 댓 글 시간(분 까지 정확)을 얻 을 수 있다.오른쪽 단 추 를 누 르 고 웹 페이지 소스 코드 를 보면 현재 게시 물의 링크 페이지 를 발견 하고 정규 표현 식 으로 링크 를 캡 처 할 수 있 습 니 다.
우선 30 일 전의 날 짜 를 가 져 오고 i 페이지 의 소스 코드 를 캡 처 하여 정규 표현 식 으로 일치 시 켜 웹 링크 와 댓 글 시간 을 가 져 옵 니 다.그림 2 참조:
게시 시간 을 비교 합 니 다.30 일 전 날짜 보다 적 으 면 게시 물 링크 가 끝나 고 현재 받 은 링크 배열 로 돌아 갑 니 다.코드 는 다음 과 같 습 니 다.
def all_movie_post(ori_url):
i = datetime.datetime.now()
delta = datetime.timedelta(days=30)
i = "%s" %(i - delta)
day = i.split(' ')[0] # 30
print day
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = { 'User-Agent' : user_agent }
post_list = []
for i in range(1,100):
request = urllib2.Request(ori_url + '-{}'.format(i),headers = headers)
response = urllib2.urlopen(request)
content = response.read().decode('utf-8')
pattern = re.compile('<a href="(.*?)" rel="external nofollow" class="truetit" >.*?<a style="color:#808080;cursor: initial; ">(.*?)</a>', re.S)
items = re.findall(pattern,content)
for item in items:
if item[1] == '2011-09-16':
continue
if item[1] > day: # 30 ,
post_list.append('https://bbs.hupu.com' + item[0])
else: # 30 ,
return post_list
return post_list
함수 의 전 참 은 첫 페이지 를 연결 하고 함수 에서 페이지 번 호 를 수정 하 며 계속 검색 합 니 다.댓 글 에서 배우 이름 검색:
다음 절차 도 하나의 함 수 를 통 해 해결 된다.함수 의 전 참 은 이전 단계 에서 얻 은 링크 배열 을 포함 하고 이미 조회 하고 싶 은 배우 이름(이 기능 은 더욱 확장 할 수 있 고 배우 이름 도 목록 으로 전송 할 수 있 으 며 이전 단계 에 생 성 된 사전 도 많 을 수 있 습 니 다)을 포함 합 니 다.
호 포 포럼 은 인 정 받 은 댓 글 을 앞 에 놓 고 반복 하기 때문이다.그림 3 참조:
중복 통 계 를 피하 기 위해 이 중복 을 먼저 제거 합 니 다.코드 는 다음 과 같 습 니 다.
if i == 0:
index = content.find(' ')
if index >= 0:
content = content[index:]
else:
index = content.find(' ')
content = content[index:]
제 거 된 규칙 은 사실 중요 하지 않다.모든 포럼 은 자신의 형식 이 있 기 때문에 소스 코드 에 어떻게 쓰 여 있 는 지 알 수 있 으 면 나머지 조작 은 스스로 규칙 에 따라 진행 할 수 있다.각 댓 글 형식 은 대체로 그림 4 와 같다.
대응 하 는 정규 표현 식 으로 일치 합 니 다.모든 댓 글 의 내용 을 찾 아 내용 에서 배우 이름,즉 처음부터 actor 를 검색 합 니 다.1 과 actor2.찾 으 면 해당 댓 글 날짜 에+1.
결국 두 배우 의 이름 을 주파수 로 되 돌려 주 고 날짜 에 따라 기 록 된 사전 은 전역 변수 이기 때문에 되 돌아 올 필요 가 없다.
web_str = '<span class="stime">(.*?) .*?</span>.*?<tbody>[\s]*<tr>[\s]*<td>(.*?)<br />' #
pattern = re.compile(web_str, re.S)
items = re.findall(pattern,content)
for item in items:
#if '<b> ' in item: # ,
#try:
#item = item.split('</blockquote>')[1]
#except:
#print item
#print item.decode('utf-8')
if actor_1 in item[1]:
actor1_dict[item[0]] += 1
actor_1_freq += 1
if actor_2 in item[1]:
actor2_dict[item[0]] += 1
actor_2_freq += 1
이로써 우 리 는 파충류 지식 을 이용 해 포럼 키워드 에 대한 빈도 검색 을 성공 적 으로 마 쳤 다.이것 은 하나의 예 일 뿐 키 워드 는 마음대로 할 수 있다.이것 은 배우 의 탄생 을 겨냥 한 프로그램 이 아니다.배우 이름 을 다른 단어 로 바 꾸 면'올해 의 키워드'와 같은 결 과 를 얻 을 수 있 고 주파수 크기 에 따라 문자 크기 를 나 타 낼 수 있다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.