[英]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.