Notice
Recent Posts
Recent Comments
Link
05-15 17:38
관리 메뉴

필피리의 잡학사전

html parssing 본문

Developer/Java

html parssing

김수필 2012. 1. 23. 23:44
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

1. xml이나 rss를 parsing 하는 것은 sax parse를 이용하면 참 간단합니다.
찾고자하는 tag명만 확실하게 알고잇으면 됩니다. 하지만 모든 싸이트가 rss나 xml로 되있다고 기다하기는 어렵습니다.
html로 되있는 곳은 찾고자 하는곳까지 잘라내며 찾아야하는 약간의 수고가 있습니다.

2. 먼저 html을 얻어올 url에서 html문서를 모두 얻어와 String 변수에 저장합니다.

- 소스코드
StringBuffer sf = new StringBuffer();

		try{

			URL url = new URL(link);		//link는 parsing할 주소 
			URLConnection con = url.openConnection();
			InputStream in = con.getInputStream();
			BufferedReader rd = new BufferedReader
			(new InputStreamReader(in, "EUC-KR"));
			while(true){
				String imsi = rd.readLine();
				if(imsi==null)
					break;
				sf.append(imsi);
			}
			rd.close();
			in.close();
		}catch(Exception e){
			e.printStackTrace();
		}



3. 필요로 하는 부분을 잘라냅니다. 이 때 필요로 하는 부분을 잘라내기 위해, 해당 url접속 후 마우스 우클릭- 소스보기 를 합니다.
그리고 원하는 부분으로 찾아갑니다. (cntl + f).

- 예를 들어 영화 html소스 중 줄거리부분



4. 잘라낼 부분 중 위아래로 unique한 부분을 찾아냅니다. 이 때 같은 포맷을 가진 다른 링크에서도 사용하려면 다른 링크에서도 이 unique한 부분이 있는지를 살펴 보아야합니다.
또한 아래에서의 unique한 부분은 줄거리 다음으로만 나오면 되므로 다른 링크에서 있는지만 확인하면 됩니다.

 - 예제에서는 줄거리 윗부분에 c_ff4200, 아랫부분에 other


 

 

 



5. 이제 소스에서 String에 저장된 값중 위의 c_ff4200가 other를 이용하여 잘라냅니다. 그리고 약간의 번거로움이 있지만 unique한 부분과 찾을 부분의 거리를 계산하여 정확히
잘라냅니다. (여유롭게 남긴다음 빈칸을 나중에 잘라내는것이 더 안전합니다)
try{
			String target = sf.toString();
			int start = target.indexOf("c_ff4200");
			int end = target.indexOf("other", start);
			String body = target.substring(start+10, end-18);
			//		System.out.println(body);

			String textWithoutTag  =  body.replaceAll("<(/)?([a-zA-Z]*)(\\s[a-zA-Z]*=[^>]*)?(\\s)*(/)?>",  "");
			Story = textWithoutTag.replaceAll(" ", "");
			//		System.out.println(Story);
		}catch(Exception e){
//			JOptionPane.showMessageDialog(null, "상세정보가 없습니다.", "경고", JOptionPane.ERROR_MESSAGE);
		}


Comments