**Java에서 jsoup를 활용하여 크롤링 하는 방법을 사용하였다.
졸업작품으로 사용자 취향에 맞춘 향수를 추천해주는 서비스를 만드는 중인데, 향수 데이터가 꽤 많다보니 크롤링이 필요했다.
Jsoup 라이브러리 설치
먼저 위 사이트에서 jsoup라이브러리를 설치한 후,
인텔리제이 File - Project Structure - Modules - Dependencies에서 다운받은 Jsoup.jar파일을 불러온 후 사용하면 된다.**
public Document connectAndGetDocument(String targetUrl) throws IOException {
Connection connection = Jsoup.connect(targetUrl);
Document document = connection.get();
return document;
}
Connection 객체는 targetUrl(Html)과 연결하기 위한 정보를 담고 있다.
Document는 Html document를 얻어내는 객체이다.
public List<PerfumeCrawling> crawPerfumeName(String targetUrl) throws IOException {
Elements setRange = connectAndGetDocument(targetUrl).select(PERFUME_NAME_CSS_QUERY_RANGE);
List<PerfumeCrawling> perfumeCrawlingNameList = new ArrayList<>();
for (int i = 0; i < setRange.size(); i++) {
PerfumeCrawling perfumeCrawling = new PerfumeCrawling(setRange.get(i).attr(PERFUME_NAME_ATTRIBUTE_KEY));
perfumeCrawlingNameList.add(perfumeCrawling);
}
return perfumeCrawlingNameList;
}
Element는 앞서 불러온 Document객체의 Html 요소를 파싱하기위한 객체이다.
private File importedFile;
private BufferedWriter bufferedWriter;
public CsvFileConversion() throws IOException {
this.importedFile = new File(filePath);
this.bufferedWriter = new BufferedWriter(new FileWriter(importedFile));
}
이후 filePath를 지정해 File 객체를 만들어 Bufferwriter에 집어넣으면 된다.
public void makeCsvData(CrawlingService crawlingService, String targetUrl) throws IOException {
int listSize = crawlingService.crawPerfumeFeature(targetUrl).size();
for (int i = 0; i < listSize; i++) {
String crawledData = "";
crawledData = getCrawlingTarget(crawlingService, targetUrl, i);
bufferedWriter.write(crawledData);
bufferedWriter.newLine();
}
bufferedWriter.flush();
bufferedWriter.close();
}
크롤링한 후에 bufferWriter.write() 를 하기만하면 끝 ! 간단하죠?