안녕하세요. 언제나휴일입니다.
이번에는 수집한 웹 페이지를 표현할 클래스를 정의합시다.
1. __init__
WebPage 개체는 웹 페이지 주소(url), 제목(title), 내용(description), 및 페이지 내 링크 컬렉션(links)을 입력 인자로 받아 멤버 필드를 설정합니다.
그리고 입력 인자로 전달받는 것 외에 페이지 내에 전체 단어 개수인 mcnt를 0으로 초기 설정합니다.
웹 페이지 제목과 내용은 태그와 특수 문자를 지워서 설정합시다.(EHHelper의 EmitTagAndSpecial 정적 메서드 호출)
#WebPage.py from EHHelper import EHHelper class WebPage: def __init__(self,url,title,description,links): self.url = url self.title = EHHelper.EmitTagAndSpecialCh(title) self.description = EHHelper.EmitTagAndSpecialCh(description) self.links = links self.mcnt=0
2. MakeWebPage – WebPage 개체를 만드는 정적 메서드
페이지 주소와 수집한 웹 페이지 개체(BeautifulSoup 개체)를 입력인자로 받아 WebPage 개체를 만드는 정적 메서드를 정의합시다.
제목은 cpage(BeautifulSoup 개체)의 title.text로 얻어옵니다.
HTML에서 링크 태그는 <a>입니다. cpage의 find_all 메서드를 이용하여 <a> 태그를 모두 구합니다.
이 중에 파일 다운로드이거나 절대 url이 아닌 것은 필터링할게요.
그리고 주소 내에 #나 쿼리 문자열에 인자 부분인 ?뒤의 내용은 스킵하기로 합시다.
@staticmethod def MakeWebPage(url,cpage): try: title = cpage.title.text atags = cpage.find_all("a") links=WebPage.ExtractionUrls(atags) except: return None else: return WebPage(url,title,cpage.text,links) @staticmethod def ExtractionUrls(atags): links = list() for atag in atags: if atag.has_attr('download') == False: try: link = atag['href'] except: continue else: link = WebPage.ExtractionUrl(link) if str.startswith(link,'http') or str.startswith(link,'https'): links.append(link) return links
3. 전체 코드
다음은 전체 코드입니다.
#WebPage.py from EHHelper import EHHelper class WebPage: def __init__(self,url,title,description,links): self.url = url self.title = EHHelper.EmitTagAndSpecialCh(title) self.description = EHHelper.EmitTagAndSpecialCh(description) self.links = links self.mcnt=0 @staticmethod def MakeWebPage(url,cpage): try: title = cpage.title.text atags = cpage.find_all("a") links=WebPage.ExtractionUrls(atags) except: return None else: return WebPage(url,title,cpage.text,links) @staticmethod def ExtractionUrls(atags): links = list() for atag in atags: if atag.has_attr('download') == False: try: link = atag['href'] except: continue else: link = WebPage.ExtractionUrl(link) if str.startswith(link,'http') or str.startswith(link,'https'): links.append(link) return links @staticmethod def ExtractionUrl(url): index = url.find('#') if(index != -1): url = url[:index] index = url.find("?") if(index != -1): url = url[:index] return url