【问题标题】:Comparing hashes and evaluate each hash比较哈希并评估每个哈希
【发布时间】:2016-10-25 18:42:10
【问题描述】:

我是 Python 新手。我想做一个“changedetector”程序。为此,我从网站获取 url 内容。并使用某种算法进行散列(如 md5)。如果我们的第一个哈希与网站内容的第二个哈希不匹配。我在推特自己。我将使用 cronjob。但我无法比较它们之间的哈希值。我必须保留旧哈希。这个旧哈希必须与新哈希进行比较。但是我的代码不能保留旧的哈希。所以每次我执行代码。反正就是在发推文。我不想要这个。所以我有实时比较方法。那么如何做到这一点呢?我需要创建数据库吗?还是我需要使用数组?我的代码;

    import hashlib
    import requests
    from twython import Twython


    link = "https://blablabla.net"
    f = requests.get(link)
    content = str(f.text)
    a= hashlib.md5()
    a.update(content.encode('utf-8'))
    sabithashdegeri= a.hexdigest
    print(a.hexdigest())

    if sabithashdegeri == a.hexdigest :
    twitter.update_status(status='Specified user () hasnt post anything yet')
    else:
    twitter.update_status(status='Specified user () has post something! Check it on blablabla')

【问题讨论】:

  • 您需要将旧文件存储在下次运行程序时可以访问的地方。无论是文件、数据库还是无关紧要的东西。
  • 感谢您的回答。但是如何交换这些哈希值?新哈希将是旧哈希。而这个新的哈希将是旧的哈希。太混乱了?
  • 在程序结束时,您会将新的哈希值保存到文件中。然后在程序开始时,您将从文件中加载此哈希并将其存储在名为 oldhash 或其他名称的变量中。
  • 如果您连续循环,那么只需存储最后一个哈希值并进行比较,如果您要重新运行代码并且某些间隔只需将哈希值保存到文件并在每次运行时加载。您还可以使用requests.head(url).headers["Last-Modified"] 查看页面的最后修改时间
  • 你是在间隔调用脚本还是代码在死循环?

标签: python twitter hash python-requests string-comparison


【解决方案1】:

由于您处于循环中,只需在循环外部创建一个初始哈希并与内部的新哈希进行比较,将 prev 变量更新为最新的新哈希:

import hashlib
from time import sleep

def hsh(txt):
    a = hashlib.md5()
    a.update(txt.encode('utf-8'))
    return a.hexdigest()

def bot(link):        
    f = requests.get(link)
    prev = hsh(f.text)      
    while True:
        f = requests.get(link)
        sabithashdegeri = hsh(f.text)
        if prev == sabithashdegeri:
             twitter.update_status(status='Specified user () hasnt post anything yet')
        else:
             twitter.update_status(status='Specified user () has post something! Check it on blablabla')
             prev = sabithashdegeri
        sleep(10)

我想你在某处睡觉以节省 CPU 周期。

运行链接上的代码并用打印替换 twitter 更新:

In [52]: link = "https://www.mehmetince.net/"

In [53]: bot(link)
Specified user () hasnt post anything yet
Specified user () hasnt post anything yet
Specified user () hasnt post anything yet
Specified user () hasnt post anything yet
Specified user () hasnt post anything yet
Specified user () hasnt post anything yet
Specified user () hasnt post anything yet
Specified user () hasnt post anything yet

【讨论】:

  • 但现在它正在发推文“指定用户发布了一些东西..”即使用户没有发布一些东西。我们该如何解决这个问题?
  • @OğuzhanKARAASLAN,我打错了,忘记调用 hexdigest
  • 但如果我不调用 hexdigest,如何比较“md5”哈希?这都是关于哈希的。不是吗?
  • 你现在正在调用它,这是我的意思,我忘记了括号,你在编辑后运行代码了吗?
  • 我现在正在调用它。这就是我必须要做的。是的,我执行了代码。但正如我所说,它并没有像它应该的那样发推文。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多