'크롤링'에 해당되는 글 1건

범일동 수치과 홈페이지를 새로 작성하고 있었습니다. 

http://soo-dent.com/

 

부산 범일동 수치과의원

부산 범일동 치과 임플란트 틀니 사랑니 충치치료 신경치료 보철치료 심미치료 스케일링, 부산임플란트, 서면임플란트, 지르코니아

soo-dent.com

인스타 연동이 안되어 있습니다. 인스타를 사진을 가져와 볼려고 했습니다.

기존 인스타그램 가져오는 api가 지원이 중단되었습니다. 

https://www.instagram.com/developer/

 

Instagram Developer Documentation

 

www.instagram.com

인스타그램 중단문구

 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();
	        }
	 
	    }
}
블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,