사이트 에서 뉴스 를 긁어내다.

설날 에 3 일 쉬 고 날씨 가 추워 서 놀 러 갈 생각 이 없 었 습 니 다. 집에 서 인터넷 뉴스 를 만 지 려 고 했 습 니 다. 주로 같은 침실 의 한 동료 가 하고 있 었 습 니 다. 그래서 무엇 을 배우 고 싶 었 습 니 다. 자신 도 손 을 써 서 생각 이 간단 합 니 다. 다음은 어떻게 실현 되 었 는 지 설명 하 겠 습 니 다!
 
먼저 홈 페이지 에 들 어간 다음 에 자신 이 '벗 기기' 하고 싶 은 정보 모듈, 예 를 들 어 뉴스, 경제, 오락 등 또는 다른 것 을 선택 하면 자신 이 필요 로 하 는 정 보 를 찾 은 다음 에 이 모듈 의 url 링크 주 소 를 읽 은 다음 에 읽 은 URL 주 소 를 옮 겨 다 니 며 정 보 를 읽 을 수 있 습 니 다.
 
현재 의 사 이 트 는 일반적으로 동적 으로 생 성 된다. 즉, 뉴스 정보 페이지 에 자신의 템 플 릿 이 있다 면 모든 정 보 는 특정한 DIV 나 용기 에 있 을 것 이다. 이 컨트롤 의 ID 를 찾 으 면 안의 데 이 터 를 얻 은 다음 에 안의 데 이 터 를 찾 을 수 있다.
 
아래 의 코드 는 제 가 특정한 사이트 의 정 보 를 테스트 한 것 입 니 다. 이미 정보 목록 을 읽 었 습 니 다. 먼저 올 려 서 여러분 께 참고 하도록 하 겠 습 니 다. 누군가의 악의 적 인 공격 을 방지 하기 위해 저 는 구체 적 인 링크 주 소 를 삭 제 했 습 니 다.
 
package hb.downweb;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.LinkedList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
 *         
 */
public class Main {

	//         
	private static final String http_url = "        ";
	//           ID
	private static final String summaryBlock = "id=\"blist\"";
	//        HTML    
	private static final String endSummaryBlock = "</table>";
	//          
	public static List<String> list = new LinkedList<String>();

	public static void main(String[] args) {
		//         
		StringBuffer stringBuffer = new StringBuffer();
		try {
			//       URL  
			URL url = new URL(http_url);
			//    ,  URLConnection  (         URL        )
			URLConnection conn = url.openConnection();
			int find_flag = 0;		//           
			//         ,
			BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
			String line;
			while((line = reader.readLine()) != null){
				//           
				if(line.indexOf(summaryBlock)!= -1){
					find_flag = 1;//          
				}
				//           
				if(line.indexOf(endSummaryBlock) != -1){
					find_flag = 2;//           
				}
				//        stringBuffer 
				if(1 == find_flag){
					stringBuffer.append(line);
				}
				//          
				if(2 == find_flag){
					System.out.println("over");
					find_flag = 0;
				}
			}
			
			System.out.println(stringBuffer);
			//               
			Pattern pattern = Pattern.compile("[0-9]{5}\\.htm");
			Matcher matcher = pattern.matcher(stringBuffer);
			System.out.println(matcher.find());
			while(matcher.find()) {
				//         list   
				list.add("         " + matcher.group());
				//         
//				System.out.println(matcher.group());
			}
			//          
			readNews(list);
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} 
	}

	/*
	 *         
	 */
	public static void readNews(List<String> list){
		String flagName = "news";
		for(int i = 0; i < list.size(); i++){
			//                     
			String temp = list.get(i);
			String filename = "";
			filename = flagName + i+".txt";
			//              
			getNewsContent(temp,filename);
		}
	}
	
	/*
	 *                    
	 */
	public static void getNewsContent(String httpLink,String fileName){
		try {
			System.out.println("getNewsContent : " + httpLink);
			//  URL          ,      
			URL url = new URL(httpLink);
			URLConnection conn = url.openConnection();
			//                   ,        ,                
			BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF-8"));
			String tempStr;
			//           ,       ,            
			File file = new File(fileName);
			FileOutputStream fos = new FileOutputStream(file);
			String class_name = "class=\"content2";
			String end_content = "</div>";
			int readContentFlag = 0;
			StringBuffer strbuf = new StringBuffer();
			while((tempStr = reader.readLine()) != null){
				if(tempStr.indexOf(class_name)!= -1){
					readContentFlag = 1;
				}
				if(tempStr.indexOf(end_content)!= -1){
					readContentFlag = 2;
				}
				if(1 == readContentFlag){
					strbuf.append(tempStr);
//					System.out.println(line);
				}
				if(2 == readContentFlag){
					System.out.println("over");
					readContentFlag = 0;
				}
				tempStr = strbuf.toString();
				System.out.println("tempStr.indexOf(class_name)2: "+ tempStr.indexOf(class_name));
				tempStr = delHTMLTag(tempStr);
				tempStr = stripHtml(tempStr);
				fos.write(tempStr.getBytes("utf-8"));
			}
			//            ,        
			fos.close();
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	

	public static String delHTMLTag(String htmlStr){ 
        String regEx_script="<script[^>]*?>[\\s\\S]*?<\\/script>"; //  script       
        String regEx_style="<style[^>]*?>[\\s\\S]*?<\\/style>"; //  style       
        String regEx_html="<[^>]+>"; //  HTML         
         
        Pattern p_script=Pattern.compile(regEx_script,Pattern.CASE_INSENSITIVE); 
        Matcher m_script=p_script.matcher(htmlStr); 
        htmlStr=m_script.replaceAll(""); //  script   
         
        Pattern p_style=Pattern.compile(regEx_style,Pattern.CASE_INSENSITIVE); 
        Matcher m_style=p_style.matcher(htmlStr); 
        htmlStr=m_style.replaceAll(""); //  style   
         
        Pattern p_html=Pattern.compile(regEx_html,Pattern.CASE_INSENSITIVE); 
        Matcher m_html=p_html.matcher(htmlStr); 
        htmlStr=m_html.replaceAll(""); //  html   

        return htmlStr.trim(); //        
    } 

	public static String stripHtml(String content) { 
		// <p>        
		content = content.replaceAll("<p .*?>", "\r
"); // <br><br/> content = content.replaceAll("<br\\s*/?>", "\r
"); // <> content = content.replaceAll("\\<.*?>", ""); // HTML // content = HTMLDecoder.decode(content); content = content.replaceAll("&nbsp;", ""); return content; } }

 
 
비고: 위의 운행 은 동기 화 된 것 입 니 다. 사용자 체험 을 향상 시 키 기 위해 위의 방식 을 '스 레 드' 로 바 꿀 수 있 습 니 다. 그러면 체험 이 많이 좋아 질 것 입 니 다. 독자 들 이 쉽게 이해 할 수 있 도록 여 기 는 더 이상 군말 하지 않 겠 습 니 다.
 
나의 이런 방법 은 통용 되 는 것 이 아니 지만 참고 로 삼 을 수 있 으 니, 여러분 들 이 많은 의견 을 제시 하 시기 바 랍 니 다!

좋은 웹페이지 즐겨찾기