簡體   English   中英

如何打印 snscrape 輸出

[英]How do I print a snscrape output

我正在嘗試打印使用 snscrape 抓取 Twitter 提要的輸出。 它適用於命令行,但我無法將其打印到文件中。 我的代碼:

import snscrape.modules.twitter as twitter
maxTweets = 10
keyword='salvation'
for i, tweet in enumerate(twitter.TwitterSearchScraper(keyword + ' since:2021-11-01 until:2023-01-01 lang:"en" ').get_items()):
    tweets = {
             "tweet.url" : tweet.url
            }   
    print(tweets)

它打印到命令行但是當我嘗試時:

with open('file.txt', 'w', encoding="utf-8") as f:
    print(tweets, file=f)

然后它不會打印,我收到一條錯誤消息:

future warning username is deprecated, use user.username instead

注意:使用mode='w' [in write-mode] open文件后打印意味着每次打印都會覆蓋文件,並且只會顯示最后一次打印。 如果你想保留所有tweets對象,你應該在循環附加而不是[因為如果你在循環外打印,同樣只有最后一個將被保存,因為tweets也會在每個循環中被覆蓋]:

# for i, tweet in...
    # tweets = ....
    with open('file.txt', 'a', encoding="utf-8") as f:
        print(tweets, file=f)

這沒有任何意義 - 這是一條警告消息,而不是錯誤消息,它不應該停止或中斷您的程序; 而且,除非您在代碼中的某處有類似tweet.username的內容,否則不應出現該警告 [如果您這樣做,那么您可能應該按照警告指示將其替換為tweet.user.username ]。

我無法重現該錯誤,您的打印方式與觸發消息應該沒有任何關系,但如果這真的是消息出現和不出現之間的唯一區別,那么您可以嘗試其他一些將其保存到文件的方法,例如將所有推文收集到列表中 [在循環中] 然后 [在循環后] 將該列表轉換為多行字符串以寫入文件:

import snscrape.modules.twitter as twitter
maxTweets = 10
keyword='salvation'
timeStr = 'since:2021-11-01 until:2023-01-01 lang:"en" '
twGen = twitter.TwitterSearchScraper(f'{keyword} {timeStr} ').get_items() 

allTweets = []
for i, tweet in enumerate(twGen):
    if i > maxTweets: break

    tweets = {
             "tweet.url" : tweet.url
            }   
    allTweets.append(tweets)

## [OUTSIDE loop]
with open('file.txt', 'w', encoding="utf-8") as f:
    f.write('\n'.join[str(t) for t in allTweets])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM