허름 한 정보 수집 방식

4508 단어 정보 수집
예전 에 업무 수요 로 인해 뉴스 수집 기 를 제작 한 적 이 있 습 니 다. 시스템 적 으로 이런 부분 을 배 운 적 이 없 기 때문에 자신 이 파악 한 기초 와 현 재 는 정규 표현 식 을 배 워 서 개별 사이트 뉴스 항목 에 맞 는 특수 문 자 를 만 든 후에 글 내용 을 수집 하 는 작은 절 차 를 만 들 었 습 니 다.주로 채집 방법 을 남 겨 두 고 보 는 것 이 며, 초보 자 에 게 도 참고 할 수 있 습 니 다.
 
예: www. whhouse. com 의 대부분의 뉴스 와 부동산 정 보 는 모두 수집 한 다른 사이트 (실제 직원 은 5 명 을 넘 지 않 고 일반 관리자 1 명, 임대 서버, 원가 가 매우 낮다).
 
먼저 이렇게 하 는 단점 을 말씀 드 리 고 다시 한 번 말씀 드 리 지만 참고 만 해 드 리 겠 습 니 다. 이것 은 제 가 학원 에서 막 나 왔 을 때 독립 적 으로 완성 한 것 입 니 다. 코드 와 논 리 를 상상 할 수 있 는 수준 입 니 다 ~!!
1. 제 공 된 페이지 에 만 연결 할 수 있 습 니 다.
2. 수집 해 야 할 정 보 는 격식 이 통일 되 어야 한다.
3. 채집 후 서식 이 좋 지 않 습 니 다.
코드 가 직접 붙 으 면 지저분 한 너 도 보고 분석 할 시간 이 없고 중요 한 코드 만 골 라 내.
우선 가장 많이 사용 되 는 두 개 를 보 여 줍 니 다. 다른 목록 에 없 는 것 은 변환 문자 와 같은 것 입 니 다.       
 
/// <summary>        

///                

/// </summary>        

/// <param name="HtmlCode">  </param>        

/// <param name="RegexString">     </param>        

/// <param name="GroupKey">          </param>        

/// <param name="RightToLeft">      </param>        

/// <returns>        </returns>       

///          ,                          



public string[] GetRegValue(string HtmlCode, string RegexString, string GroupKey, bool RightToLeft)        

{            

MatchCollection m;            

Regex r;           

 if (RightToLeft == true)            

{                

r = new Regex(RegexString, RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.RightToLeft);            

}            

else            

{                

r = new Regex(RegexString, RegexOptions.IgnoreCase | RegexOptions.Singleline);            

}            

m = r.Matches(HtmlCode);            

string[] MatchValue = new string[m.Count];            

for (int i = 0; i < m.Count; i++)            

{                

MatchValue[i] = m[i].Groups[GroupKey].Value;            

}            

return MatchValue;        

}

///              

public string getHtml(string url, Encoding coding)        

{            

try            

{                

HttpWebRequest myRequest;                

HttpWebResponse myResp = null;                

System.IO.StreamReader myReader = null;                

myRequest = (HttpWebRequest)WebRequest.Create(url);                myRequest.ReadWriteTimeout = 60 * 1000;                

myRequest.Timeout = 30 * 1000;                

myRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";                

myRequest.KeepAlive = true;                

myResp = (HttpWebResponse)myRequest.GetResponse();                

myReader = new System.IO.StreamReader(myResp.GetResponseStream(), coding, true);                

string html = myReader.ReadToEnd();                

myReader.Close();                

myResp.Close();                

return html;            

}            

catch (Exception e)            

{                

return "";            

}        

}


 
그 다음 에 본 격 적 으로 채집 을 시작 합 니 다. 일반 사이트 의 뉴스 항목 은 여러 가지 유형 입 니 다. 특정한 유형 에 들 어가 면 하나의 목록 이 이런 뉴스 를 표시 한 다음 에 계속 페이지 를 넘 깁 니 다. 연결 은 모두 사이트 의 같은 디 렉 터 리 에 고정 되 고 페이지 는 숫자 로 증가 하 는 파일 이름 입 니 다.이렇게 하면 분류 페이지 의 링크 를 전송 한 후에 분류 에 있 는 모든 뉴스 를 순환 한 다음 에 뉴스 링크 를 통 해 모든 뉴스의 소스 파일 을 읽 고 원 하 는 내용 을 수집 할 수 있 습 니 다.채집 의 수량, 순서 등 을 조절 할 수 있 는 조건 을 설정 할 수 있다.
 
글 의 내용 을 여러 요소 로 나 누 어 일치 시 킨 후 데이터베이스 에 저 장 된 단독 필드 로 자신의 사이트 형식 으로 출력 하 는 것 을 권장 합 니 다.다음은 페이지 소스 코드 를 가 져 온 상황 에서 소스 코드 와 일치 하 는 글 의 텍스트 부분 입 니 다. 여기 서 취 재 는 블 로그 원 뉴스 를 예 로 들 어 보 겠 습 니 다. ㅎ ㅎ (규칙 에 어 긋 나 면 아래 코드 를 차단 하고 메 시 지 를 보 내 주세요. 다시 쓰 겠 습 니 다. 촌장 님 감사합니다.)
public void getContent(string html, news n)        

{            

//    http://news.cnblogs.com/n/83321/  html   .            

//<!--end: news_info -->                           

//<!--end: come_from -->                           

string RegexString = "<!--end: news_info -->(?<content>[^<].*?)<!--end: come_from -->";            

string[] articlebody = tool.GetRegValue(html, RegexString, "content", false);//              

if (articlebody.Length > 0)            

{

//    ,                     

}            

else            

{                

return;            

}        

}


 
 
점심 시간 이 짧 아서 출근 할 때 사 이 트 를 조회 할 수 없어 서 서둘러 요.RegexString 문자열 의 정확 여 부 를 검증 하지 않 았 고 코드 도 대부분 삭 제 했 습 니 다. 정말 죄송합니다.

좋은 웹페이지 즐겨찾기