2017-10-11 15 views
-1

Je suis en train d'écrire un programme python, parce que je suis paresseux, qui vérifie un site Web pour une ouverture d'emploi, j'ai été informé et renvoie tous les emplois de la page Web des entreprises.Python MD5 hachage même contenu renvoie hachage différent

Voici mon code à ce jour (oui je sais le code est jancky mais je suis juste essayer de le faire fonctionner)

import requests 
from bs4 import BeautifulSoup 
import sys 
import os 
import hashlib 

reload(sys) 
sys.setdefaultencoding('utf8') 

res = requests.get('WEBSITE URL', verify=False) 
res.raise_for_status() 

filename = "JobWebsite.txt" 

def StartUp(): 
    if not os.path.isfile(filename): 
     try: 
      jobfile = open(filename, 'a') 
      jobfile = open(filename, 'r+') 
      print("[*] Succesfully Created output file") 
      return jobfile 
     except: 
      print("[*] Error creating output file!") 
      sys.exit(0) 
    else: 
     try: 
      jobfile = open(filename, 'r+') 
      print("[*] Succesfully Opened output file") 
      return jobfile 
     except: 
      print("[*] Error opening output file!") 
      sys.exit(0) 

def AnyChange(htmlFile): 
    fileCont = htmlFile.read() 
    FileHash = hasher(fileCont, "File Code Hashed") 
    WebHash = hasher(res.text, "Webpage Code Hashed") 
    !!!!! Here is the Problem 
    print ("[*] File hash is " + str(FileHash)) 
    print ("[*] Website hash is " + str(WebHash)) 
    if FileHash == WebHash: 
     print ("[*] Jobs being read from file!") 
     num_of_jobs(fileCont) 
    else: 
     print("[*] Jobs being read from website!") 
     num_of_jobs(res.text) 
     deleteContent(htmlFile) 
     writeWebContent(htmlFile, res.text) 

def hasher(content, message): 
    content = hashlib.md5(content.encode('utf-8')) 
    return content 

def num_of_jobs(htmlFile): 
    content = BeautifulSoup(htmlFile, "html.parser") 
    elems = content.select('.search-result-inner') 
    print("[*] There are " + str(len(elems)) + " jobs available!") 

def deleteContent(htmlFile): 
    print("[*] Deleting Contents of local file! ") 
    htmlFile.seek(0) 
    htmlFile.truncate() 

def writeWebContent(htmlFile, content): 
    htmlFile = open(filename, 'r+') 
    print("[*] Writing Contents of website to file! ") 
    htmlFile.write(content.encode('utf-8')) 

jobfile = StartUp() 
AnyChange(jobfile) 

Le problème que j'ai actuellement est que je Hash à la fois des sites web code html et le code html des fichiers. Cependant, les deux hachages ne correspondent pas, comme toujours, je ne suis pas sûr et je ne peux que deviner que cela pourrait être quelque chose avec le contenu étant enregistré dans un fichier. Les hash ne sont pas trop éloignés mais il provoque encore la déclaration Si à l'échec chaque fois

Breakpoint in Program with hashes

Répondre

1

La capture d'écran que vous avez joint est montrant l'emplacement des deux objets hachage fileHash et webHash. Ils devraient être dans des endroits différents.

Ce que vous voulez vraiment comparer est le hexdigest() des deux objets de hachage. Modifiez votre instruction if à:

if FileHash.hexdigest() == WebHash.hexdigest(): 
     print ("[*] Jobs being read from file!") 
     num_of_jobs(fileCont) 

Jetez un oeil à ce other StackOverflow answer pour un peu plus comment faire.

+0

Je vois ce que vous voulez dire avec les adresses d'assemblage, je travaillais là-dessus à 1h du matin et j'ai simplement survolé ma tête. Cependant, les hachages diffèrent encore en valeur après le changement. Je vais y regarder de plus près et je rapporterai si je le répare. –