반응형

자식이 부모에게 값전달

 

부모

<template>
  <AgreeContent v-if="obj.text=='agree'" @text-change-agree="agreeMethod"></AgreeContent>
  <ExchangeContent v-if="obj.text=='exchange'"></ExchangeContent>

  <br><hr>
  <button v-on:click="obj.text= (obj.text=='agree'? 'exchange':'agree')"> click me! </button>
  {{obj.text}}
</template>

<script>
import AgreeContent from "@/components/AgreeContent";
import ExchangeContent from "@/components/ExchangeContent";

export default {
  name: 'App',
  components: {
    ExchangeContent,
    AgreeContent
  },
  data() {
    return {
      obj: {
        text: "agree"
      }
    }
  },
  methods: {
    agreeMethod : function(text) {
      this.obj.text = text;
    }
  }
}
</script>

AgreeContent 라는 커스텀 엘리먼트는

obj.text == agree 일때 출력됨.

 

ExchangeContent 라는 커스텀 엘리먼트는 

obj.text == exchange 일때 출력됨.

 

AgreeContent 한테 @text-change-agree 라는 key로 agreeMethod를 보냄

(카멜케이스 안먹힘!!!!!!!!!!!!!!!!!!!!!!!!!!! 꼭 - 포함해서 하도록!!!!!!!!!!!)

 

일단 기본적으로 obj.text == agree로 세팅되어있으므로 <AgreeContent> 컴포넌트만 출력될것임.

 

 

자식1 - AgreeContent 

<template>
 <h2>agree 컴포넌트 입니다</h2>

  <p>agree~~~~</p>
  <button @click="move">excange로 이동~</button>
</template>

<script>
export default {
  name: "AgreeContent",

  methods: {
    move: function() {
      this.$emit('text-change-agree', "exchange");
    }
  }
}

AgreeContent 에서 버튼을 클릭하면 move 라는 메소드가 실행되고

move에서는 emit 을 통해서 text-change-agree 로 exchange를 보냄

 

이때 부모창에서 있는 text-change-agree로 들어와서

 

//부모창 메소드

agreeMethod : function(text) {
      this.obj.text = text;
    }

 이것을 실행하고 부모창의 obj.text == exchange 로 변환되면서

 

//부모창
<AgreeContent v-if="obj.text=='agree'" @textChangeAgree="agreeMethod"></AgreeContent>
<ExchangeContent v-if="obj.text=='exchange'"></ExchangeContent>

AgreeContent 는 안보이고

ExchangeContent 가 보이게됨.

 

 

자식2 - ExchangeContent 

 

<template>
  <h2>Excange 컴포넌트 입니다</h2>

  <p>Excange~~~~</p>
</template>

<script>
export default {
  name: "ExcangeContent",

  methods: {
   
  }
}

얘가 보이게될것임

728x90
반응형

출처 : https://domdom.tistory.com/175

 

[크롤링] 파이썬으로 인스타그램 게시물 크롤링하기 (json)

처음 인스타그램 사이트에 들어가면 로그인창이 나와요. 일단 로그인을 해줍니다! https://www.instagram.com/ 그리고서, 원하는 게시물을 크롤링 하기 위해 게시물을 검색해볼게요. 저는 강아지를 좋

domdom.tistory.com

 

이분 코드로 진행해보았고 사진파일저장 & 엑셀저장까지 추가적으로 개발했다

 

 

 

빠르게 인스타그램 크롤링 하는방법 시작!!

 

1. 파이썬 다운로드

다운로드 url : https://www.python.org/downloads/

 

Download Python

The official home of the Python Programming Language

www.python.org

 

위 경로에 들어가서 파이썬 다운로드

 

다운로드할때 나는 D드라이브 경로로 별도지정해서 다운로드했다.

 

다운로드 끝났으면 CMD 창 (명령프로토콜)에서 확인해야하는데, 시작 바에서 CMD 치면 나온다.

 

파이썬이 잘 다운로드됐나 확인하기위하여 명령어를 입력해본다.

 

phtyon --version

파이썬 버전이 출력되면 정상적으로 된것.

 

 

2. vscode 다운로드

다운로드 URL: https://code.visualstudio.com/download

나는 윈도우 유저라서 시스템인스톨러 64bit 윈도우 용으로 다운받았다.

 

 

3. 인스타그램 로그인

 

1) 로그인 후 F12 버튼 누름

키보드에서 F12 누르면 관리자 창이 뜨는데 name 쪽을 보면 아직 깨끗하다.

 

2) 내가 원하는 태그명 검색

 

태그를 검색하면 주소창이 아래와 같은 형식으로 변경될것이다.

https://www.instagram.com/explore/tags/태그이름/ 

 

3) URL 변경

https://www.instagram.com/explore/tags/태그이름/?a=1

기존 url 에서?a=1 를 붙여서 들어가보면 json 파일 형식이 노출될것임.

 

이때 다시 f12로 들어가보면

?_a=1 이라는 name 이 보이고, 걔를 클릭해보면

Request Header가 존재하는데, 이 창을 유지한 상태로 냅둔다.

 

3. 필요 라이브러리 다운

 

1). cmd (명령 프로토콜)창에서 필요한 라이브러리들 다운받는다.

pip install openpyxl 
pip install requests
pip install datetime

요거 세개가 필요하다.

세줄 써있다고 한꺼번에 입력하지말고 한줄 입력 후 다운받아지면 그다음줄 입력하면된다.

 

4. vscode 실행 & 코드작성

 

1) 원하는 위치에 폴더하나 만들고 vscode를 실행한다. ex) D드라이브에 폴더하나 생성 

 

2) vscode 실행 > 파일 > 폴더열기 

    1.test 폴더를 연다.

 

 신뢰 안내창나오면 신뢰합니다 체크

문서하나 생성해서 test.py 로 py 파일 생성

 

 

정상적으로 생성됐으면 사진 저장할 폴더를 하나 만들어준다.

요 아이콘눌러서 images 라는 이름으로 생성

 

그리고 test.py에 아래 코드를 복붙. test 말고 다른이름으로 해서 생성해도되지만 꼭 .py가 붙어야된다.

 

from pprint import pprint
from openpyxl.workbook.workbook import Workbook
import requests
import json

from datetime import datetime

# 헤더값은 각자의 f12의 내용 참고해서 작성해야됨. 아래 코드의 값과 다를 수 있음.

header = {
    'accept': '*/*',
    'accept-encoding': 'gzip, deflate, br',
    'accept-language': 'ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7',
    'cookie': 'f12에서 찾아서 넣어야됨 쿠키값',
    'referer': "f12에서 찾아서 넣어야됨",
    'sec-ch-ua': '" Not A;Brand";v="99", "Chromium";v="96", "Google Chrome";v="96"',
    'sec-ch-ua-mobile': '?0',
	'sec-ch-ua-platform':'windows',
    'sec-fetch-dest': 'empty',
    'sec-fetch-mode': 'cors',
    'sec-fetch-site': 'same-origin',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36',
    'x-asbd-id': 'f12에서 찾아서 넣어야됨',
    'x-ig-app-id': 'f12에서 찾아서 넣어야됨',
    'x-ig-www-claim': 'f12에서 찾아서 넣어야됨',
    'x-requested-with': 'XMLHttpRequest'
}


dataList = []
URL = 'https://www.instagram.com/explore/tags/태그명/?__a=1' 

# 개수확인용도
pidCount = 0

while(True):

    res = requests.get(URL, headers =header)
    res = res.json()

    if 'next_page' not in res['data']['recent'].keys() or int(res['data']['recent']['next_page']) == 0: break
    max_id = res['data']['recent']['next_max_id'] 

    for n in res['data']['recent']['sections']: 

        for m in ((n['layout_content']['medias'])): 
            # m : 인스타 게시글 1개
            m = m['media']
            data = {} 
            data['pagePk'] = m['code']
            data['URL'] = 'https://www.instagram.com/p/'+ data['pagePk']+"/"
            data['user_name'] = (m['user']['username']) 
            
            # 이미지/동영상 체크
            keys = m.keys()
            if 'carousel_media' in keys:
                data['image'] = (m['carousel_media'])
            else:
                data['image'] = [{'image_versions2':{"candidates":[{'url':'동영상업로드'}]}}]


            dataList.append(data)
            pidCount = pidCount+1
            pprint (pidCount) # 개수확인용도

    URL = 'https://www.instagram.com/explore/tags/'+'태그명'+'/?__a=1&max_id='+max_id



# 엑셀 다운로드 및 이미지 저장

from openpyxl import Workbook
wb = Workbook()
ws = wb.active


#시트생성
sheet1 = wb['Sheet']
sheet1.title = '수집 데이터'
sheet1['A1'] = '아이디'
sheet1['B1'] = 'URL'
sheet1['C1'] = '이미지'

sheetIndex = 2

for data in dataList:
    sheet1['A'+str(sheetIndex)] = data['user_name']
    sheet1['B'+str(sheetIndex)] = data['URL']
     
    # 이미지링크 엑셀에 저장
    for imgUrl in data['image']:

        url = imgUrl['image_versions2']['candidates'][0]['url']
        sheet1['C'+str(sheetIndex)] = url
        
        # 이미지 폴더에 저장
        if not os.path.exists("./images/"+data['user_name']):
            os.mkdir("./images/"+data['user_name'])

        if url not in '동영상업로드':
            r = requests.get(url)
            file = open("./images/"+data['user_name']+'/'+data['user_name']+str(sheetIndex)+".jpg","wb")
            file.write(r.content)
            file.close()

        sheetIndex = sheetIndex+1



wb.save('./test1.xlsx')

 

 

헤더값은 아까 f12에서 구한 쿠키값..등등 제목보고 알아서 넣고

아까 이미지저장용 폴더를 images 라고 만들었는데, 다른 이름으로 생성하고싶으면 바꿔도된다. 하지만

위 코드에서 ./images 로 써져잇는 부분을 동일하게 꼭 바꿔줘야된다

 

최종적으로 저장되는 엑셀파일 이름도 wb.save('./test1.xlsx') 라고 되어있는데, 이부분을 원하는 엑셀이름으로 바꿔도됨.

 

이렇게하면, 1.test 라는 폴더안에 test1.xlsx 이 생성되고 images 폴더안에 사진들이 알아서 저장된다.

 

 

 

 

728x90
반응형

Execution failed for task  :compileJava'.

 

분명 Project Structure... 에서 JDK 버전도 제대로 적용시켜놨는데 자바 버전 차이로 안되는 이유를 찾아헤맸다.

 

Gradle을 쓰고있었는데 settings > Build, Executin, Deployment  > Gradle > Gradle JVM 설정이 변경이 안됐었다.

JVM설정 자바버전 동일하게 맞춰주니 정상적으로 빌드됨.

728x90
반응형

위 두가지 경우는 모두 내잘못이다.

 

mybatis 데이터 안넘어올때

 

1. dto 수정한적이 있는가?

2. 수정했다면, resultMap 에 해당 property & column을 추가하였는가?

3. select 할때 해당 데이터 컬럼명을 추가하였는가?

 

이 세가지만 보면 대체적으로 해결된다.

 

resultMap 안먹힐때

 

1. 데이터 받는 타입을 별도로 설정안했고 resultType 으로 받는가? 

2. 데이터 받는 타입을 resultMap으로 설정하였으며 resultMap 으로 받는가?

 

이게 이상하게..잘 안보이는데, 꼭 result type 인지 map 인지 확인하자

 

시간버리지말고!!!!!

728x90

+ Recent posts