我正在制作一个简单的脚本,看看我最喜欢的YouTuber Casey Neistat是否上传了一个新视频。我希望脚本循环遍历,以便查看是否有新视频。但是,每当我运行该程序时,它会不断地说有一个新视频,即使它应该认识到'output.txt'文件没有变化,其中包含他视频的所有链接。我对python和编程很新,所以这可能是一个比我认识的人更有经验的简单修复。
我的代码如下:
import bs4
import requests
import re
root_url = 'https://www.youtube.com/'
index_url = root_url + 'user/caseyneistat/videos'
def getNeistatNewVideo():
response = requests.get(index_url)
soup = bs4.BeautifulSoup(response.text)
return [a.attrs.get('href') for a in soup.select('div.yt-lockup-thumbnail a[href^=/watch]')]
def mainLoop():
while True:
results = str(getNeistatNewVideo())
past_results = str(open("output.txt"))
if results == past_results:
print("No new videos at this time")
return True
else:
print("There is a new video!")
print('...')
print('Writing to new text file')
print('...')
f = open("output.txt", "w")
f.write(results)
print('...')
print('Done writing to new text file')
print('...')
return True
mainLoop()
答案 0 :(得分:2)
调用open(output.txt)
会返回文件对象,而不是文件中的文本。在文件对象上调用str
只会给出对象的描述,而不是文本。要做到这一点,你需要像
output = open('output.txt')
past_results = output.read()
此外,您似乎在str
的输出上调用getNeistatNewVideo
这是一个列表,几乎肯定不是您想要做的。我想output.txt
的格式是分开的一串链接。如果是这种情况,那么你会想要
results = "\n".join(getNeistatNewVideo())
这将为每个链接提供一个单独的字符串。你真的应该打印str
电话的输出,看看它们的样子。所以,它总是说有新的东西是因为
results == past_results
由于概述的原因,总是假的