我的while循环中的方法不起作用

时间:2015-06-14 19:51:47

标签: python loops

我正在制作一个简单的脚本,看看我最喜欢的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()

1 个答案:

答案 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 
由于概述的原因,

总是假的