https://itstudy-mary.tistory.com/137
전에 한번 jsoup에 대한 이야기를 한 적이 있었다. 주소를 파싱해서 값을 찾아서 html 내부의 값을 파싱해준다.
그러니까, 먼저 MavenRepository에서 Jsoup를 다운로드 받아 프로젝트에 빌드패스 한다.
https://itstudy-mary.tistory.com/72?category=902777
빌드패스 한 이후 Jsoup로 데이터를 가져오는데, 이 때 쿼리스트링을 돌려서 쿼리스트링의 변화에 따라 언론사를 찾는다(언론사 쿼리 스트링 : oid)
이 때 주의할 점은 같은 언론사 oid여도 글이 지워질 경우 언론사가 서치되지 않기 때문에 aid(글 번호) 쿼리스트링도 함께 돌려가면서 찾아야 한다.
package crawlingcode;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
//1번 Jsoup (Maven)
//2번 Jsoup로 URL 요청
//3번 oid의 번호는 어디까지 있는지
//oid마다의 신문사명을 매칭
public class OidParse {
public static void main(String[] args) {
Map<String, String> oidMap = new HashMap<String, String>();
Document news = null;
int intOid = 1;
int intAid = 1;
String oid = "001";
String aid = "0000000001";
Elements element = null;
String press = null;
while (true) {
try {
aid = String.format("%010d", intAid);
news = Jsoup.connect("https://news.naver.com/main/read.nhn?oid=" + oid + "&aid=" + aid).get();
element = news.select("meta[property=\"me2:category1\"]");
press = element.attr("content");
if (press.equals("") || press == null) {
if (intAid < 1000) {
intAid = intAid + 10;
aid = String.format("%010d", intAid);
continue;
} else {
System.out.println(oid+"다 뒤져도 없엉..");
}
} else {
System.out.print(oid+ " ");
System.out.println(press);
oidMap.put(press, oid);
System.out.println("전체 맵 길이는 : " + oidMap.size());
}
aid = "0000000001";
intOid++;
oid = String.format("%03d", intOid);
} catch (IOException e) {
intOid++;
oid = String.format("%03d", intOid);
// ignored.printStackTrace();
}
}
}
}
반응형
'JAVA' 카테고리의 다른 글
20. 이벤트 (0) | 2020.04.20 |
---|---|
19. GUI (0) | 2020.04.20 |
18. 소켓 통신 (0) | 2020.04.14 |
17. 멀티 스레드 (0) | 2020.04.13 |
16. 익명 클래스 (0) | 2020.04.13 |