2017-08-05 51 views
-3

我想登录到一个网站,获取数据,将其保存到一个文件,一段时间后获取新的数据,并与旧的(保存的)数据进行比较,并打印,如果事情已经改变。我怎么做?登录正在工作,但比较不是。为什么?Python监控网站的变化

预先感谢您!

我的代码:

# -*- coding: utf-8 -*- 
import urllib 
import urllib2 
import cookielib 
import time 


def login(): 
    username = "username" 
    password = "password" 

    cj = cookielib.CookieJar() 
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 
    login_data = urllib.urlencode({'login_username' : username, 'login_password' : password}) 
    opener.open('lol.com/login', login_data) 
    resp = opener.open('lol.com/login') 
    data = resp.read() 
    print data  
    write_data(data) 

def write_data(data): 
    file = open("htmlString", "w") 
    file.write(data) 
    file.close() 
    monitor(data) 



def monitor(data): 
    string1 = open("htmlString", "r").read() 
    string2 = data 
    while True: 
     time.sleep(5) 
     login() 
     if string1 == string2: 
      print "Nothing has changed" 
     else: 
      print "Something has changed" 




login() 
+0

那到底是什么不工作? 'monitor',至多(我不知道你的代码是否能得到这么多),只能用于检测一个变化。之后,它没有什么比较新的东西,因为'data'是固定的。 – roganjosh

+0

它甚至不打印“没有任何改变”。那是一个问题。第二个问题是,正如你所说,只是比较一次。我怎样才能解决这个问题?我真的不知道.. – Hamiraro

+0

那么,那些'打印'进来'if' /'else',所以你的代码不会那么远。您需要在流程的早期进行调试。如果有错误,你应该把它放在你的问题。 – roganjosh

回答

1

,我发现你的代码相当棘手的跟随。这是一个未经测试的替代方案,应该接近您尝试实现的目标。

def fetch_html(): 
    # fetch logic 
    return html # string 

def write_html(html): # string 
    # write logic 

def read_html(): 
    with open('page.html','r') as f: 
     return f.read() 

def monitor(): 
    write_html(fetch_html()) 
    while True: 
     time.sleep(5) 
     new_html = fetch_html() 
     if new_html == read_html(): 
      print('Nothing has changed') 
     else: 
      print('Something has changed') 
      write_html(new_html) 

monitor() 
1

问题是当您拨打login()string2未更新。您应该让login()返回data并将其分配给string2每个循环。