상세 컨텐츠

본문 제목

[Python]Tweepy를 이용한 셀럽 트윗 크롤링하기

Coding

by My_Dream 2020. 4. 18. 15:39

본문

안녕하세요~ Coding공부를 하면서 제가 직접 만든 코드를 앞으로 공유해려구 해요~

 

첫번째로 공유하는 코드는, 제가 Tweepy 모듈을 이용해서 만든 트위터 셀럽 트윗 크롤링입니다.

셀럽의 트위터내용도 받아오면서, 이미지까지 크롤링하는 것까지 만들어봤습니다.

 

저 역시 공부를 위해 만들어보고, 공유한거라 100% 완벽한 코드는 아닐수 있어요... 

이상한 부분이 있거나, 보완할 부분이 보이신다면, 댓글로 말씀해주시면 좋을 것 같습니다~^^

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import tweepy
import datetime
import threading
import smtplib
from email.mime.text import MIMEText
import json
import os
 
def UCS(s):
    return "".join((i if ord(i) < 10000 else '\ufffd' for i in s))
 
pic = []
max_tweets = 20
searched_tweets = []
last_id = -1
 
def check_time(curr_hour):
    dt = datetime.datetime.now()
   celeb_Tweet = []
 
    if curr_hour != dt.hour:
        print(dt)
        curr_hour = dt.hour
 
        consumer_key = "개인 Consumer_Key입력"
        consumer_secret = "개인 Consumer_Secret입력"
        auth = tweepy.OAuthHandler(consumer_key, consumer_secret)       
 
        access_token = "개인 Access_Token입력"
        access_token_secret = "개인 Acecess_Token_Secret입력"
 
        auth.set_access_token(access_token, access_token_secret)
 
        api = tweepy.API(auth)
 
        hour = 0
 
        if curr_hour == 0:
            hour = 24
        else:
            hour = curr_hour
 
        while len(searched_tweets) < max_tweets:
            count = max_tweets - len(searched_tweets)
 
            try:
                public_tweets = api.home_timeline()
                if not public_tweets:
                    break
                searched_tweets.extend(public_tweets)
                last_id = public_tweets[-1].id
 
            except tweepy.TweepError as e:
                break
 
 
 
        for i, tweet in enumerate(public_tweets):
            print(i)
            print(tweet.text)
            print("\n")
           celeb_Tweet.append("\n")
 
#여기서부턴 트위터 내에 있는 이미지를 크롤링
            try:
               celeb_Tweet.append("★{0}번째 트윗★\n".format(i+1))
               celeb_Tweet.append(tweet.text + "\n")
                print(len(tweet.extended_entities['media']))
                for count in range(0len(tweet.extended_entities['media'])):
                    if tweet.extended_entities['media'][count]['type'== 'photo':
                        pic.append(tweet.extended_entities['media'][count]['media_url'])
                       celeb_Tweet.append("\n")
                       celeb_Tweet.append("▶▶▶{0}번째 사진:".format(count+1+ tweet.extended_entities['media'][count]['media_url'])
 
               celeb_Tweet.append("\n")
 
            except:   #try 구문 안에서 NG가 나더라도, except구문으로 이동한다
               celeb_Tweet.append("\n")
                print('0')
 
 
 
        mail_id = "메일 ID"
        mail_pw = "메일 Password"
 
        s = smtplib.SMTP("smtp.gmail.com"587)
        s.starttls();
 
        s.login(mail_id, mail_pw)
 
        msg = MIMEText("".join(celeb_Tweet))  ## 리스트를 문자열로 바꾸는 방법은 join함수를 이용
 
        msg["Subject"= "{0}월 {1}일, {2}시".format(dt.month, dt.day, dt.hour) + " " + "celeb Tweet"
 
        s.sendmail(mail_id, "메일주소", msg.as_string())
        s.close()
 
 
    threading.Timer(1, check_time, args=[curr_hour]).start()
 
 
 
if __name__ == "__main__":
    check_time(-1)
 
 
 
cs

댓글 영역