मैंने यह फ़ंक्शन मुझे यह बताने के लिए बनाया है कि क्या वेबसाइट में कोई परिवर्तन हुए हैं। मुझे यकीन नहीं है कि यह काम करता है क्योंकि मैंने इसे कुछ वेबसाइटों पर आजमाया है जो नहीं बदले हैं और इसने मुझे गलत आउटपुट दिया है। मुद्दा कहां है और क्या कोई मुद्दा है? यह कोड है:

मैंने कोड को एक फ़ंक्शन में रखा है ताकि मैं उपयोगकर्ता को किसी भी साइट पर इनपुट करने की अनुमति दे सकूं

userurl=input("Please enter a valid url")
def checksite(userurl):
    change=False
    import time

    import urllib.request

    import io

    u = urllib.request.urlopen(userurl)

    webContent1 = u.read()

    time.sleep(60)

    u = urllib.request.urlopen(userurl)

    webContent2 = u.read()

    if webContent1 == webContent2:
        print("Everything is normal")
    elif webContent1 !=webContent2:
        print("Warning, there has been a change to the webite!")
        change=True

    return change
checksite(userurl)
1
casualcoder 15 अगस्त 2018, 20:39
क्या आपने webContent1 और webContent2 की सामग्री की जांच की? हो सकता है कि उनमें सामग्री प्रदर्शित होने का समय हो, इसलिए अंतर ...
 – 
toti08
15 अगस्त 2018, 20:45
मैं पुष्टि कर सकता हूं कि https://www.google.com आपको भिन्न सामग्री की लंबाई देगा। शायद कुछ ऐसी वेबसाइटें आज़माएँ जिन्हें आप निश्चित रूप से जानते हैं कि स्थिर हैं / नहीं बदलती हैं। जैसे example.com
 – 
XoXo
15 अगस्त 2018, 20:48

3 जवाब

एक छोटा HTML हैलो वर्ल्ड पेज बनाने का प्रयास करें। यह देखते हुए कि कई वेबसाइटों में गतिशील सामग्री होती है जो हर बार आपके द्वारा एक्सेस किए जाने पर बदल जाती है (और जरूरी नहीं कि दिखाई भी दे), जिससे आपके "गलत" परिणाम हो सकते हैं।

1
beefoak 15 अगस्त 2018, 20:49

मैंने आपके कोड का परीक्षण किया है और यह एक पायथन वेबसर्वर में बिल्कुल ठीक काम करता है।

मैंने एक के साथ शुरुआत की है python -m http.server

और सर्वर शुरू करने से पहले कुछ सामग्री के साथ उसी निर्देशिका में एक index.html रखा।

और आपका कोड

import time
import urllib.request
import io

userurl='http://localhost:8000/index.html'

def checksite(userurl):
    change=False
    u = urllib.request.urlopen(userurl)

    webContent1 = u.read()
    print(webContent1)

    time.sleep(15)

    u = urllib.request.urlopen(userurl)
    webContent2 = u.read()
    print(webContent2)
    if webContent1 == webContent2:
        print("Everything is normal")
    elif webContent1 !=webContent2:
        print("Warning, there has been a change to the webite!")
        change=True
    return change

checksite(userurl)

और आउटपुट

b'<html>\n\t<title> Hello </title>\n\t<body>\n\t\tTesting, Webcontent1 \n\t</body>\n\t</html>\n\n'
b'<html>\n\t<title> Hello </title>\n\t<body>\n\t\tTesting, Webcontent2\n\t</body>\n\t</html>\n\n'
Warning, there has been a change to the webite!
[Finished in 17.5s]

आपका कोड बिल्कुल ठीक है।

1
rɑːdʒɑ 15 अगस्त 2018, 21:02

यह जानने के लिए कि क्या कोई वेबसाइट या पृष्ठ बदल गया है, आपको कहीं न कहीं इसका बैकअप लेने की आवश्यकता है, आपके कोड में ऐसा था जैसे आप साइट की तुलना स्वयं से कर रहे थे ... वैसे भी। मैं BS4 के अलावा अनुरोध पुस्तकालय का उपयोग करने की सिफारिश करता हूं और आपके पास मौजूद बैकअप की तुलना में इसे लाइन से पार्स करने का प्रयास करता हूं।

तो जब कोड काम कर रहा है (उर्फ: आपके पास बैकअप के रूप में साइट वेब पर साइट के समान लाइन दिखा रही है) इसका एक चर सत्य होगा। अगर यह बदल गया है तो यह लूप को तोड़ देता है और बस उस रेखा को दिखाता है जहां साइट बदल गई है।

0
Vitor Araújo 15 अगस्त 2018, 20:50
ठीक है, मैं कोशिश करूँगा कि गतिशील वेबसाइटों के साथ
 – 
casualcoder
15 अगस्त 2018, 21:30