범일동 수치과 홈페이지를 새로 작성하고 있었습니다.
인스타 연동이 안되어 있습니다. 인스타를 사진을 가져와 볼려고 했습니다.
기존 인스타그램 가져오는 api가 지원이 중단되었습니다.
https://www.instagram.com/developer/
Instagram Basic Display API뭔가 싶어 들어가서 따라해보니 잘 안되어 있네요.
가이드문서가 정리가 잘 안되어 있어서 구글검색을해보니 크롤링해서 사진을 가져오는 분들이 보였습니다.
저도 크롤링으로 가져오기로 합니다.
일단 크롤링으로 데이터를 가져와보니 인스타내용이 보이지 않았습니다.
인스타는 자바스크립트소스를 보내주고 사용자환경에서 스크립트를 실행하여 데이터를 받아오는 형태입니다..
셀레니움으로 하는 방법이 있던데 일반 사람이 접속해서 스크립트가 실행된후 브라우저 데이터값을 가져올수 있었습니다.
일종의 자동화 도구인데 자바역시 지원하여 정리 합니다.
셀레니움을 받아 설치를 합니다.
https://www.seleniumhq.org/ 에서 윈도우 버전의 셀레니움을 받습니다.
<!-- 크롬 셀리니움 -->
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
pom.xml 에 추가합니다.
//WebDriver
private WebDriver driver;
private WebElement element;
//Properties
public static final String WEB_DRIVER_ID = "webdriver.chrome.driver";
public static final String WEB_DRIVER_PATH = "chromedriver.exe";
WEB_DRIVER_PATH 를 잘설정합니다.
System.setProperty(WEB_DRIVER_ID, WEB_DRIVER_PATH);
driver = new ChromeDriver();
base_url = "https://www.instagram.com/soodental9/";
driver.get(base_url);
이러면 인스타그램 페이지 내용을 가져옵니다.
Document doc = Jsoup.parse(driver.getPageSource());
// HTML 문서의 타이틀 추출하기
System.out.println("HTML TITLE : " + doc.title());
가져온내용을 JSOUP 를이용하여 파싱을 합니다.
소스에서 가져와야될 부분을 찾습니다.
Elements tables = doc.select(".ySN3v"); //클래스..
Elements linksOnPage = tables.select(".v1Nh3.kIKUG._bz0w"); //클래스..
데이터를 가져와서 출력해보았습니다.
int i=1;
for (Element page : linksOnPage) {
System.out.println("count : "+i++);
Element link = page.select("a").first();
String linkHref = link.attr("href");
System.out.println("a href : "+base_url+linkHref);
Element img = page.select("img").first();
String imgtag = img.outerHtml();
System.out.println("img : "+imgtag);
}
테스트 페이지를 만들어서 위내용을 붙여 넣어 봅니다.
img 태그와 a태그를 db에 넣어서 불러와서 사용하면 되겠습니다. 내용갱신은 하루에 한번 하도록 하면 되겠네요.
아래는 소스 전체 내용입니다.
package com.sms2019.da;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class instagram_Selenium {
public static void main(String[] args) {
instagram_Selenium selTest = new instagram_Selenium();
selTest.crawl();
}
//WebDriver
private WebDriver driver;
private WebElement element;
//Properties
public static final String WEB_DRIVER_ID = "webdriver.chrome.driver";
public static final String WEB_DRIVER_PATH = "chromedriver.exe";
//크롤링 할 URL
private String base_url;
public instagram_Selenium() {
super();
//System Property SetUp
System.setProperty(WEB_DRIVER_ID, WEB_DRIVER_PATH);
driver = new ChromeDriver();
base_url = "https://www.instagram.com/soodental9/";
}
public void crawl() {
try {
//get page (= 브라우저에서 url을 주소창에 넣은 후 request 한 것과 같다)
int waittime=10;
driver.get(base_url);
JavascriptExecutor js = (JavascriptExecutor) driver;
//System.out.println(driver.getPageSource());
Document doc = Jsoup.parse(driver.getPageSource());
// HTML 문서의 타이틀 추출하기
System.out.println("HTML TITLE : " + doc.title());
Elements tables = doc.select(".ySN3v"); //클래스..
Elements linksOnPage = tables.select(".v1Nh3.kIKUG._bz0w"); //클래스..
int i=1;
for (Element page : linksOnPage) {
System.out.println("count : "+i++);
Element link = page.select("a").first();
String linkHref = link.attr("href");
System.out.println("a href : "+base_url+linkHref);
Element img = page.select("img").first();
String imgtag = img.outerHtml();
System.out.println("img : "+imgtag);
}
System.out.println("======================================================");
} catch (Exception e) {
e.printStackTrace();
} finally {
driver.close();
}
}
}
'SPRING FRAMEWORK' 카테고리의 다른 글
스프링 에러 java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener (0) | 2020.03.11 |
---|---|
SPRING 도메인 주소 확인후 리다이렉트 하기 (0) | 2020.01.27 |
이클립스 배경색 변경하기 (0) | 2020.01.08 |
스프링 JSGRID 그리드 테이블 사용해보기. (0) | 2020.01.03 |
카페24 SMS 스프링에서 보내기 restTemplate 활용하기 (0) | 2019.12.13 |