본문 바로가기
IT/파이썬 덕질

[파이썬 덕질] 트위터의 사진을 모조리 저장해보자

by 친절한껍데기 2018. 9. 13.

파이썬으로 덕질을 쉽게하는법을 배웁니다.

모바일버전으로는 일부 코드를 보기 어려울 수 있습니다.

PC를 권장해드립니다만, 모바일에서도 대략 이해는 가능하실 겁니다.

모바일에서 보고 PC에서 퍼다쓰세요!




파이썬으로 덕질하기! 두번째시간!


트위터에 많은 사진들이 올라오잖아요?

하나하나 저장하려면 매우 귀찮은데요...

그냥 한번에 저장하는 방법을 소개하고자 합니다.


이번에도 지난번처럼 파이썬으로 프로그래밍을 합니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#-*- coding: utf-8 -*-
import tweepy
from tweepy import OAuthHandler
import json
import wget
import os
 
consumer_key = 'a'
consumer_secret = 'b'
access_token = 'c'
access_secret = 'd'
 
auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_secret)
 
api = tweepy.API(auth)
query = raw_input(u'검색하고 싶은거 머임?: ')
print query
max_tweets = 1500
searched_tweets = []
last_id = -1
 
while len(searched_tweets) < max_tweets:
    count = max_tweets - len(searched_tweets)
    try:
        new_tweets = api.search(q=query, tfilter=" -filter:retweets",
 resultType="mixed" ,count=count, max_id=str(last_id - 1))
        if not new_tweets:
            break
        searched_tweets.extend(new_tweets)
        last_id = new_tweets[-1].id
    except tweepy.TweepError as e:
        break
 
pic=[]
 
for a in searched_tweets:
    try:
        print len(a.extended_entities['media'])
        for count in range(0,len(a.extended_entities['media'])):
            if a.extended_entities['media'][count]['type']=="photo":
                pic.append(a.extended_entities['media'][count]['media_url'])
    except:
        print "0"
 
pic=list(set(pic))
no=0
for b in pic:
    no=no+1
    try:
        wget.download(b+":orig", "picture/"+str(no)+".jpg")
    except:
        pass
cs


약 50줄이네요..


트위터의 API를 이용해서 트위터에 접근해야하는데,

https://apps.twitter.com/

위 사이트에 들어가서 신청하시면 됩니다.

받아서 8~11째 줄까지를 채워넣으세요.


동작하는 모습을 한번 볼까요?


약 300개의 꿀깅이 사진을 다운 받았습니다 ㅎㅎ

다만 제가 중간에 캡쳐를 껏어요.. 시작하고 약 2분을 기다려야 했습니다.

트위터 1500개의 내용을 받아와야하거든요.



코드 설명

import tweepy
from tweepy import OAuthHandler
import json
import wget
import os

모듈선언부 입니다.


consumer_key = 'a'
consumer_secret = 'b'
access_token = 'c'
access_secret = 'd'
 
auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_secret)
 
api = tweepy.API(auth)

트위터에 로그인입니다. 정확히는 API로 접근.


query = raw_input(u'검색하고 싶은거 머임?: ')
print query
max_tweets = 1500
searched_tweets = []
last_id = -1

입력받기 및 초기화 부분입니다. max_tweets를 바꾸면 대상 트윗수를 바꿀 수 있어요.

그리고 입력부분은 트위트가 태그인 부분은 #을 넣어서 지정해줘야합니다.


while len(searched_tweets) < max_tweets:
    count = max_tweets - len(searched_tweets)
    try:
        new_tweets = api.search(q=query, tfilter=" -filter:retweets"
resultType="mixed" ,count=count, max_id=str(last_id - 1))
        if not new_tweets:
            break
        searched_tweets.extend(new_tweets)
        last_id = new_tweets[-1].id
    except tweepy.TweepError as e:
        break

트윗중에 제가 입력한 이름으로 검색합니다.


pic=[]
 
for a in searched_tweets:
    try:
        print len(a.extended_entities['media'])
        for count in range(0,len(a.extended_entities['media'])):
            if a.extended_entities['media'][count]['type']=="photo":
                pic.append(a.extended_entities['media'][count]['media_url'])
    except:
        print "0"

찾은 트윗중에서 사진이 있는 트윗만 분리합니다.


pic=list(set(pic))
no=0
for b in pic:
    no=no+1
    try:
        wget.download(b+":orig", "picture/"+str(no)+".jpg")
    except:
        pass

분리한 트윗을 저장! 끝!

(":orig" 는 원본으로 저장하기 위해서 붙입니다)



ㅋㅋ 받은거 몇개 올려봤어요!

몇번만 돌리시면 금방 짤부자가 되실 수 있을거에요.


자매품 구글에서 다운받기도 있어요. 아래 포스팅 참고하세요!

http://yoyoii.tistory.com/400



도움이 되셨다면,

프로미스나인 10월초에 컴백하니 신곡나오면 한번씩 들어주세요