2016-06-22 10 views
0

私はPython 3.Xを使ってTwitterをスクラップしようとしていますが、私のリクエストの最後の20のつぶやきしか収集しません。 2006年と今の間にリクエストの全データを収集したいと思います。これには、最後のつぶやきを集める機能と、現在のつぶやきを集める機能という2つの機能を追加することが考えられます。 このスクロールページからデータを収集するにはどうすればよいですか?私はツイートのIDを使用しなければならないと思うが、リクエストに関係なく、いつも最後の20のつぶやきがある。私Infinite Web Scrapping Twitter

from pprint import pprint 
from lxml import html 
import requests 
import datetime as dt 
from BeautifulSoup import BeautifulSoup 

def search_twitter(search): 
    url = "https://twitter.com/search?f=tweets&vertical=default&q="+search+"&src=typd&lang=fr" 
    request = requests.get(url) 
    sourceCode = BeautifulSoup(request.content, "lxml") 
    tweets = sourceCode.find_all('li', 'js-stream-item') 
    return tweets 

def filter_tweets(tweets): 
    data = [] 
    for tweet in tweets: 
     if tweet.find('p', 'tweet-text'): 
      dtwee = [ 
       ['id', tweet['data-item-id']], 
       ['username', tweet.find('span', 'username').text], 
       ['time', tweet.find('a', 'tweet-timestamp')['title']], 
       ['tweet', tweet.find('p', 'tweet-text').text.encode('utf-8')]] 
      data.append(dtwee) 
      #tweet_time = dt.datetime.strptime(tweet_time, '%H:%M - %d %B %Y') 
     else: 
      continue 
    return data 

def firstlastId_tweets(tweets): 
    firstID = "" 
    lastID = "" 
    i = 0 
    for tweet in tweets: 
     if(i == 0): 
      firstID = tweet[0][1] 
     elif(i == (len(tweets)-1)): 
      lastID = tweet[0][1] 
     i+=1 
    return firstID, lastID 

def last_tweets(search, lastID): 
    url = "https://twitter.com/search?f=tweets&vertical=default&q="+search+"&src=typd&lang=fr&max_position=TWEET-"+lastID 
    request = requests.get(url) 
    sourceCode = BeautifulSoup(request.content, "lxml") 
    tweets = sourceCode.find_all('li', 'js-stream-item') 
    return tweets 

tweets = search_twitter("lol") 
tweets = filter_tweets(tweets) 
pprint(tweets) 
firstID, lastID = firstlastId_tweets(tweets) 
print(firstID, lastID) 
while True: 
    lastTweets = last_tweets("lol", lastID) 
    pprint(lastTweets) 
    firstID, lastID = firstlastId_tweets(lastTweets) 
    print(firstID, lastID) 

答えて

0

を支援するための Thxを私は、このWebページに基づいて、良い解決策を見つけた:

http://ataspinar.com/2015/11/09/collecting-data-from-twitter/

私はこの文字列を格納された変数と呼ばれるMAX_POSを作成していた何をしたか:

'&max_position=TWEET-'+last_id+'-'+first_id 

私はfirst_idposition1 Tweet id)とlast_id

request = requests.get(url+max_pos)

max_pos emptyを皮切り:)

だから要求のために、私はこのようなものを使用しました。

これは一般的な問題であることがわかりました。私たちは実際の解決策を投稿できます。私はまだそれが私の必要な方法で結果を示すことはありませんが、私はリンクからのガイドに続いて "最後までスクロール"をシミュレートすることができます。

関連する問題