현재 위치 - 회사기업대전 - 기업 정보 공시 - 자바 웹 크롤러는 어떻게 구현합니까?

자바 웹 크롤러는 어떻게 구현합니까?

웹 크롤러는 웹 페이지를 자동으로 추출하는 프로그램입니다. 월드 와이드 웹에서 검색 엔진용 웹 페이지를 다운로드하는 것은 검색 엔진의 중요한 구성 요소입니다.

기존 파충류는 하나 이상의 초기 웹 페이지의 URL 로 시작하여 초기 웹 페이지의 URL 을 가져옵니다. 웹 페이지를 등반하는 동안 시스템의 특정 중지 조건이 충족될 때까지 현재 페이지에서 새 URL 을 계속 추출하여 대기열에 넣습니다. 수직 검색의 경우 파충류, 즉 특정 주제 웹 페이지를 캡처하는 파충류에 더 적합합니다.

다음은 Java 를 사용하여 구현 된 간단한 크롤러 코어 코드입니다.

공용 void 크롤링 () Throwable {

While (continueCrawling()) {

Crawler URL URL = getnext URL (); //큐에서 크롤링할 다음 URL 을 가져옵니다.

만약 (웹 사이트! = null) {

Printcrawlinfo ();

Stringcontent = getcontent (URL); //URL 의 텍스트 정보 가져오기

//초점 파충류는 주제 내용과 관련된 웹 페이지만 캡처합니다. 여기서는 규칙 일치를 사용하여 간단하게 처리합니다.

If (iscontentrelevent (컨텐트, this.regexpSearchPattern)) {

SaveContent(url, 컨텐츠); //웹 페이지를 로컬로 저장합니다.

//웹 콘텐츠의 링크를 가져와서 대기열에 넣어 캡처합니다.

컬렉션 urlStrings = extractUrls (컨텐트, URL);

AddUrlsToUrlQueue(url, urlstrings);

} 그렇지 않으면 {

System.out.println(url+"관련없는 무시 ...");

}

//상대방에 의해 차폐되는 것을 방지하기 위해 연기

Thread.sleep (this.delaybetweenurls);

}

}

Closeoutputstream ();

}

Private CrawlerUrl getNextUrl () 에서 Throwable {

CrawlerUrl nextUrl = null

While ((next URL = = null) & & amp (! UrlQueue.isEmpty())) {

Crawler URL crawler URL = this.urlqueue.remove ();

//doWeHavePermissionToVisit: 이 URL 에 대한 액세스 권한이 있든 없든 친숙한 파충류는 웹 사이트에서 제공하는 "Robot.txt" 에 구성된 규칙에 따라 기어갑니다.

//IsurlReadyVisited:URL 에 액세스한 적이 있습니까? 대형 검색 엔진은 BloomFilter 를 사용하여 복사하는 경우가 많습니다. 여기, 간단히 HashMap 을 사용하세요.

///isdepthaceptable: 지정된 최대 깊이에 도달했는지 여부. 파충류는 일반적으로 폭 우선 접근 방식을 사용합니다. 일부 웹 사이트에서는 파충류 트랩 (자동으로 잘못된 링크를 생성하여 파충류를 사순환에 빠뜨림) 을 구축하고 깊이 제한을 적용하여 피합니다.

If (dowehavepermissiontovisit (crawler URL)

& amp& amp (! Isurlareadyvisited(crawler URL))

& amp& is depth acceptable (crawler URL)) {

NextUrl = crawlerUrl 입니다

// System.out.println ("다음에 액세스할 URL 은" Next URL "입니다

}

}

NextUrl 을 반환합니다

}

전용 문자열 getContent(CrawlerUrl) 가 Throwable {

//HttpClient4. 1 은 이전과 다르게 호출됩니다.

Http client client = new default http client ();

Http get http get = new http get (url.geturlstring ());

Stringbufferstrbuf = new stringbuffer ();

Httpresponseresponse = client.execute (http get);

If (http 상태. SC_OK == response.getStatusLine () 입니다. GetStatusCode()) {

Http entity entity = response.getentity ();

다음 경우 (엔티티! = null) {

BufferedReader reader = 새로운 BufferedReader (

Newinputstreamreader (entity.getcontent (), "utf-8");

String line = null

If (entity.getcontentlength () > 0) {

Strbuf = new stringbuffer ((int) entity.getcontentlength ());

While ((line = reader.readLine ())! = null) {

StrBuf.append (행);

}

}

}

다음 경우 (엔티티! = null) {

Nsumecontent ();

}

}

//URL 을 방문한 것으로 표시합니다.

Markurlasvisited (URL);

Strbuf.tostring () 을 반환합니다

}

Public static boolean is content relevant (문자열 내용,

모드 regexpPattern) {

부울 반환 값 = false;

만약 (내용! = null) {

//정규식의 조건을 충족합니까?

Matcher m = regexppattern.matcher (content.tolowercase ());

Retvalue = m.find ();

}

RetValue 를 반환합니다

}

공용 목록 추출 Url (문자열 텍스트, CrawlerUrl crawlerUrl) {

맵 urlmap = newhashmap ();

Extrachttpurls(URL map, text);

Extractreativeurls(URL map, text, crawler URL);

새 ArrayList (urlmap.keyset ()) 를 반환합니다.

}

개인 void extractHttpUrls (맵 urlMap, 문자열 텍스트) {

Matcher m = (텍스트);

While (m.find()) {

String URL = m.group ();

String [] terms = url.split ("a href = \");

For (문자열 용어: 용어) {

//system.out.println ("term ="+term);

If (term.startsWith("http")) {

Intindex = term.indexof ("\");

If (인덱스 > 0) {

Term = term.substring(0, 색인);

}

UrlMap.put(term, term);

System.out.println ("하이퍼링크:"+term);

}

}

}

}

Private void extractRelativeUrls (매핑 urlMap, 문자열 텍스트,

파충류 {

Matcher m = relativeregexp.matcher (텍스트);

Urltext URL = crawler url.geturl ();

Stringhost = text url.gethost ();

While (m.find()) {

String URL = m.group ();

String [] terms = url.split ("a href = \");

For (문자열 용어: 용어) {

If(term. starts with("/"){

Intindex = term.indexof ("\");

If (인덱스 > 0) {

Term = term.substring(0, 색인);

}

문자열 s =//+ 호스트+용어;

UrlMap.put(s, s);

System.out.println ("상대 URL:"+s);

}

}

}

}

공용 정적 void main(String[] args) {

시도 {

문자열 URL =

Queue URL queue = new linkedlist ();

String regexp = "Java

UrlQueue.add(new CrawlerUrl(url, 0));

Naive crawler crawler = new naive crawler (URL queue,100,5, 1000L,

Regexp);

//boolean allow crawl = crawler.areweallowedtovisit (URL);

// System.out.println ("크롤링 허용:"+URL+""+

//allowcrawl);

Crawler. 크롤링 ();

} catch (Throwable t) {

System.out.println (t.tostring ());

T.printstacktrace ();

}

}

copyright 2024회사기업대전
ngji.js">