דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ארכיון code613m
  4. סריקת אתר וזיהוי שינויים בנושא מסויים

סריקת אתר וזיהוי שינויים בנושא מסויים

מתוזמן נעוץ נעול הועבר ארכיון code613m
23 פוסטים 7 כותבים 1.5k צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • א מנותק
    א מנותק
    אליעזר 0
    כתב ב נערך לאחרונה על ידי
    #9

    <!-- s:-) --><img src="{SMILIES_PATH}/icon_e_smile.gif" alt=":-)" title="מחייך" /><!-- s:-) -->
    קלעת למטרה...
    תודה רבה

    פורסם במקור בפורום CODE613 ב20/02/2017 15:39 (+02:00)

    תגובה 1 תגובה אחרונה
    0
    • avrahamA מנותק
      avrahamA מנותק
      avraham
      כתב ב נערך לאחרונה על ידי
      #10

      @אליעזר

      🙂
      קלעת למטרה...
      תודה רבה

      לא קשה לנחש מה המטרה בפרוייקט הזה 🙂 🙂

      פורסם במקור בפורום CODE613 ב20/02/2017 20:34 (+02:00)

      תגובה 1 תגובה אחרונה
      1
      • א מנותק
        א מנותק
        אליעזר 0
        כתב ב נערך לאחרונה על ידי
        #11

        כן. למי שמכיר אותי קצת

        פורסם במקור בפורום CODE613 ב20/02/2017 23:58 (+02:00)

        תגובה 1 תגובה אחרונה
        0
        • A מנותק
          A מנותק
          avr416
          כתב ב נערך לאחרונה על ידי
          #12

          @אליעזר

          עכשיו מגיע את החלק הקל <!-- s:-) --><img src="{SMILIES_PATH}/icon_e_smile.gif" alt=":-)" title="מחייך" /><!-- s:-) --> :
          ללמוד פייתון, או NODE.JS ... ולעשות זאת....)

          ספר לימוד לפייתון בעברית

          בהצלחה!

          פורסם במקור בפורום CODE613 ב21/02/2017 14:17 (+02:00)

          תגובה 1 תגובה אחרונה
          2
          • א מנותק
            א מנותק
            אליעזר 0
            כתב ב נערך לאחרונה על ידי
            #13

            @avraham

            משהו כזה לדוגמא

            http://www.prog.co.il/search.php?query=סקריפט&exactname=1&starteronly=0&forumchoice[]=0&prefixchoice[]=&childforums=1&titleonly=0&showposts=0&searchdate=30
            

            נ"ב: כמה שניסתי לא הצלחתי להבין כיצד מוצאים את המחרוזת הזאת בחיפוש של פרוג (כלומר כיצד ידעת לנסחה)?
            בכל מקרה, היא לא עוזרת לי כל כך כי מגיע לדף החיפוש עצמו, ואני צריך את הURL שיחזיר את תוצאות החיפוש... (או שלא הבנתי משהו בדרך?)

            בנתיים נראה לי לעשות כך:
            לקבל חזרה הHTML, לחפש לפי ניתוח הדף את הרשימת לינקים (שהם ההפניות לנשואים הנידונים, למשל:

            Untitled-1.jpg
            ואותם לנתח עד להגעת לdictionary כזה: {title:link}
            ואז להשוות למילון קודם שישמר בקובץ חיצוני, ואם יהיה הפרש, ישלח לי מייל עם הלינק והכותרת.

            מה דעתכם?

            תודה רבה

            נ"ב: תיעוד התוכנית כרגע, שיסייע להבנה, מחילה על האנגלית הקלוקלת...

            from Tools.scripts.h2py import filedict
            import os
            
            
            def askSite(urlQuery,words):
                """find in site by query strings,
                find only data from last day
            
                :param urlQuery: semple:""
                :param words: query strings, simple: "yosi cohen"
                :return: dictionary of all href html in site, simple: "{title:link}"
                """
                pass
            
            def filterNews(oldData,newData):
                """filtr parms and return news date only
            
                :param oldData: dictionary
                :param newData: dictioanry
                :return: Only data that is in the newData or null
                """
                pass
            
            def sendMail(dictionaryData,ToMail):
                """format dictionry and send the data to "toMail"
            
                :param dictionaryData: dictionary only
                :param ToMail: text mail only: "mail@.domain.end"
                :return: true to successful false to failure
                """
                pass
            
            def saveDataToFile(fromDict,filePath):
                """save the data to text file in json format
            
                :param dict: dictionary
                :param filePath: filePath, exies or not (the def create file if it no exies)
                :return: true to successful false to failure
                """
                pass
            
            #initialization varibals
            filePath="objects\DB.txt"
            
            if os.path.exists(filePath):
                OldDate = open(filePath, "r+")
                print(OldDate.read(),"old")
                OldDate.close()
            else:
                OldDate=open(filePath,"w+")
                print(OldDate.read(),"new")
                OldDate.close()
            #המשך טרם נכתב
            

            פורסם במקור בפורום CODE613 ב20/03/2017 18:36 (+02:00)

            תגובה 1 תגובה אחרונה
            4
            • א מנותק
              א מנותק
              אליעזר 0
              כתב ב נערך לאחרונה על ידי
              #14

              נ"ב למותר לציין שזה קוד הפייתון הראשון שאני כותב.

              כרגע החסרון העקרי ברעיון הזה, הוא שהתוכנית תתאים ככפפה ליד רק לאתר מסוים, פרוג. ולא תצלח כלל לאתר אחר.
              זה לא באמת בעיה מצד הצורך שלי. אבל זה נשמע לי תכנון "תוכנה" לקוי מאד.

              פורסם במקור בפורום CODE613 ב20/03/2017 20:56 (+02:00)

              תגובה 1 תגובה אחרונה
              1
              • avrahamA מנותק
                avrahamA מנותק
                avraham
                כתב ב נערך לאחרונה על ידי
                #15

                תשלח בקשת POST לכתובת הזו:

                http://www.prog.co.il/search.php?do=process
                

                עם הנתונים האלה

                beforeafter=after&childforums=1&do=process&dosearch=%D7%97%D7%A4%D7%A9&exactname=1&forumchoice%5B%5D=0&order=descending&prefixchoice%5B%5D=&query=%D7%A1%D7%A7%D7%A8%D7%99%D7%A4%D7%98&replyless=0&replylimit=0&s=&saveprefs=1&searchdate=30&searchthreadid=&searchuser=&securitytoken=guest&showposts=0&sortby=lastpost&starteronly=0&tag=&titleonly=0
                

                זה יפנה אותך לדף של "בקשת החיפוש בטיפול" שמכיל לינק למזהה של החיפוש. משם תוכל להמשיך לדף של תוצאות החיפוש ולנתח את התוצאות.

                בקשר לתכנון התוכנה, נראה לי שצריך להפריד את זה ל3 שכבות, בקשת החיפוש, ניתוח התוצאות, וההחלטה מה לעשות עם התוצאות. בשלב השני אין מנוס מלתכנן את זה לכל אתר בנפרד, וגם השלב הראשון כנראה ישתנה מאתר לאתר. כך שתוכל לתכנן את הקוד בצורה שאפשר להוסיף מחלקות רלוונטיות לכל אתר שתרצה להוסיף בהמשך, ולשלוח את התוצאות אחרי ניתוח לשכבה השלישית

                פורסם במקור בפורום CODE613 ב20/03/2017 23:01 (+02:00)

                תגובה 1 תגובה אחרונה
                3
                • א מנותק
                  א מנותק
                  אליעזר 0
                  כתב ב נערך לאחרונה על ידי
                  #16

                  תודה רבה!
                  נשמע מאד הגיוני.

                  (כעת עלה בדעתי לנסות אולי לכתוב הכל דרך חיפוש מותאם בגוגל, וככה יתאים לכל אתר, רק יש לבדוק אם ניתן לקבל תוצאות כמו חיפוש באתר עצמו, מצד האיכות, כרגע אני לא מצליח לכתוב חיפוש בגוגל שיחפש רק בתת פורם עיצוב גרפי למשל, וגם רימון חוסם יותר את החיפוש הזה)

                  פורסם במקור בפורום CODE613 ב21/03/2017 11:47 (+02:00)

                  תגובה 1 תגובה אחרונה
                  0
                  • dovidD מנותק
                    dovidD מנותק
                    dovid ניהול
                    כתב ב נערך לאחרונה על ידי
                    #17

                    לחיפוש גוגל יש חסרונות עצומים כשזה נוגע לפורומים (שמתעקשים להיות ישנים בכל התפיסה של SEO).
                    למשל אם יש בחתימה של מישהו את המילה שאתה מחפש, כל מקום שהוא מופיע זה רלוונטי בדיוק כמו תוכן ההודעה שלו.
                    אותו דבר התאריך - כל הדף שווה את התאריך ההקפצה.
                    לכן בפרוג עדיף לחפש עם המנוע שלהם.

                    פורסם במקור בפורום CODE613 ב21/03/2017 11:57 (+02:00)

                    מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                    בכל נושא אפשר ליצור קשר dovid@tchumim.com

                    תגובה 1 תגובה אחרונה
                    1
                    • א מנותק
                      א מנותק
                      אליעזר 0
                      כתב ב נערך לאחרונה על ידי
                      #18

                      אוי ואבוי... נשמע גרוע באמת. רוב התוצאות יהיו זבל כנראה.
                      טוב, אז אחזור למה שחשבתי מראש ונוותר על תוכנת "גמישה".

                      תודה רבה

                      פורסם במקור בפורום CODE613 ב21/03/2017 12:02 (+02:00)

                      תגובה 1 תגובה אחרונה
                      0
                      • א מנותק
                        א מנותק
                        אליעזר 0
                        כתב ב נערך לאחרונה על ידי
                        #19

                        שלום!
                        האם מקובל להציג כאן קוד לדון עליו ולא רק שאלות בו?
                        אם לא, תקנו אותי בבקשה.

                        אם כן...

                        כאמור זה הקוד פייתון הראשון שלי, אשמח לכל הערה בונה, ולכן אני מצרף כאן את הקוד של הפונקציה שכתבתי היום...
                        יעודו:
                        מקבל שתי רשימות באורך זהה, הראשונה היא זו שאליה משווים, השניה זו שנבדקת בפועל. עובר לפי הסדר בלבד, ומשווה אברים, אברים לא זהים, מוחזרים ברשימה חדשה.

                        תודה לכולכם!

                        def filterNews(OldData, NewData):
                            """filtr parms and return news date only (test if 1==1,2==2...)
                        
                            :param oldData,newList: identical lists of dictionary [{title:link},{title:link}]
                            :return: Only data that is in the newData or null (if new[1]!=old[1],now[2]!=old[2]...)
                            """
                            try:
                                if str(type(OldData)) and str(type(NewData)) !="<class 'list'>":
                                    raise AttributeError("the def work on list only!")
                                if len(OldData) != len(NewData):
                                    raise AttributeError("The lists are not identical in length!")
                                newList=[]
                                startIndex=0
                                endIndex=len(NewData)
                                while startIndex<endIndex:
                                    if str(OldData[startIndex])!=str(NewData[startIndex]):
                                        newList.append(NewData[startIndex])
                                    startIndex+=1
                            except AttributeError as er:
                                print("Error:", er)
                                return False
                            else:
                                return newList
                        
                        
                        old=[1,2,3,4,5]
                        new=[4,5,3,45,5]
                        
                        print(filterNews(old,new))
                        print(old,new)
                        

                        פורסם במקור בפורום CODE613 ב22/03/2017 20:57 (+02:00)

                        תגובה 1 תגובה אחרונה
                        0
                        • T מנותק
                          T מנותק
                          trew
                          כתב ב נערך לאחרונה על ידי
                          #20

                          @אליעזר

                          שלום!
                          האם מקובל להציג כאן קוד לדון עליו ולא רק שאלות בו?
                          אם לא, תקנו אותי בבקשה.

                          אם כן...

                          כאמור זה הקוד פייתון הראשון שלי, אשמח לכל הערה בונה, ולכן אני מצרף כאן את הקוד של הפונקציה שכתבתי היום...
                          יעודו:
                          מקבל שתי רשימות באורך זהה, הראשונה היא זו שאליה משווים, השניה זו שנבדקת בפועל. עובר לפי הסדר בלבד, ומשווה אברים, אברים לא זהים, מוחזרים ברשימה חדשה.

                          תודה לכולכם!

                          def filterNews(OldData, NewData):
                              """filtr parms and return news date only (test if 1==1,2==2...)
                          
                              :param oldData,newList: identical lists of dictionary [{title:link},{title:link}]
                              :return: Only data that is in the newData or null (if new[1]!=old[1],now[2]!=old[2]...)
                              """
                              try:
                                  if str(type(OldData)) and str(type(NewData)) !="<class 'list'>":
                                      raise AttributeError("the def work on list only!")
                                  if len(OldData) != len(NewData):
                                      raise AttributeError("The lists are not identical in length!")
                                  newList=[]
                                  startIndex=0
                                  endIndex=len(NewData)
                                  while startIndex<endIndex:
                                      if str(OldData[startIndex])!=str(NewData[startIndex]):
                                          newList.append(NewData[startIndex])
                                      startIndex+=1
                              except AttributeError as er:
                                  print("Error:", er)
                                  return False
                              else:
                                  return newList
                          
                          
                          old=[1,2,3,4,5]
                          new=[4,5,3,45,5]
                          
                          print(filterNews(old,new))
                          print(old,new)
                          

                          הגרסה שלי לקוד

                          עם הזמן תראה שאתה יכול להשתמש בפייתון בלי לדחוף לכל דבר try except
                          try except אתה משתמש במקומות שאתה נזרק מהתוכנית כי אתה לא יודע מה אתה מקבל ואין לך אפשרות לבדוק / לא כדאי לך לבדוק את שלל האופציות האחרות

                          def filterNews(OldData, NewData):
                              """filtr parms and return news date only (test if 1==1,2==2...)
                           
                              :param oldData,newList: identical lists of dictionary [{title:link},{title:link}]
                              :return: Only data that is in the newData or null (if new[1]!=old[1],now[2]!=old[2]...)
                              """
                                 if not isinstance(OldData, list) and not isinstance(NewData, list):
                                  print("the def work on list only!")
                                  return None
                              elif len(OldData) != len(NewData):
                                  print("The lists are not identical in length!")
                                  return None
                              newList=[]
                              for New, Old in zip(NewData, OldData):
                                  if NewData[New] != OldData[Old]:
                                      newList.append(New)
                              return newList
                           
                          old=[1,2,3,4,5]
                          new=[4,5,3,45,5]
                           
                          print(filterNews(old,new))
                          print(old,new)
                          

                          מה היה לנו פה
                          zip עובר על שתי מערכים בו זמנית אבר מפה ואבר משם
                          In [8]: a, b = range(1, 10), range(100, 1000, 100)

                          In [9]: for i, j in zip (a, b):
                             ...:     print("{0} -- {1}".format(i, j))
                             ...:     
                          1 -- 100
                          2 -- 200
                          3 -- 300
                          4 -- 400
                          5 -- 500
                          6 -- 600
                          7 -- 700
                          8 -- 800
                          9 -- 900
                          

                          בפייתון מעבר על מילון בלולאה מוציא רק את המפתחות ולא את התוכן (אתה מקבל מערך של מפתחות)

                          In [13]: my_dict = {i:j for i, j in zip(range(1,10), "ABCDEFGIJ")}
                          
                          In [14]: my_dict
                          Out[14]: {1: 'A', 2: 'B', 3: 'C', 4: 'D', 5: 'E', 6: 'F', 7: 'G', 8: 'I', 9: 'J'}
                          
                          In [16]: for i in my_dict:
                              ...:     print (i)
                              ...:     
                          1
                          2
                          3
                          4
                          5
                          6
                          7
                          8
                          9
                          

                          isinstance הצורה בפייתון שבודקים type של אובייקט

                          אחרי כל הברברת נראה שזה מה שאתה מחפש
                          https://github.com/GregUK/vb3_7_scraper

                          אגב זה לא רק לאתר אחד אלא למערכת פורומים אחת שנחשבת בין הפופולריות.

                          פורסם במקור בפורום CODE613 ב23/03/2017 19:39 (+02:00)

                          תגובה 1 תגובה אחרונה
                          3
                          • 0 מנותק
                            0 מנותק
                            0
                            כתב ב נערך לאחרונה על ידי
                            #21

                            תודה רבה על התגובה!
                            אני צריך ללמוד אותה בעיון.
                            בנתיים אודה מקרב לב על התגובה המושקעת ומועילה

                            פורסם במקור בפורום CODE613 ב26/03/2017 14:28 (+03:00)

                            תגובה 1 תגובה אחרונה
                            1
                            • T מנותק
                              T מנותק
                              trew
                              כתב ב נערך לאחרונה על ידי
                              #22

                              פרוג שידרגו את האתר שלהם חסדי הקל
                              תוכל לקבל json עם פוסטים חדשים, כתבתי את רוב הסקריפט העבודה שנשארה יחסית קטנה.

                              תהנה

                              #!/usr/bin/python3
                              
                              import requests
                              import time
                              import json
                              
                              def getUpdate():
                                  with requests.Session() as s:
                                      url = 'http://www.prog.co.il/activity/get'
                                      headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36',
                                                  'Accept': 'application/json, text/javascript, */*; q=0.01',
                                                  'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
                                                  'X-Requested-With': 'XMLHttpRequest'}
                                      params = {"filters[nodeid]":0,
                                                 "filters[view]":"activity",
                                                 "filters[per-page]":10,
                                                 "filters[pagenum]":1,
                                                 "filters[maxpages]":20,
                                                 "filters[userid]":"0",
                                                 "filters[showChannelInfo]":1,
                                                 "filters[filter_time]":"time_lastmonth",
                                                 "filters[filter_show]":"show_all",
                                                 "filters[filter_new_topics]":1,
                                                 "isAjaxTemplateRender":"true",
                                                 "isAjaxTemplateRenderWithData":"true",
                                                 "securitytoken":"replace with your security token"}
                                      resp = s.post(url, data=params, headers=headers).json()
                                  return checkUpdate(resp)
                              
                              def checkUpdate(json):
                                  ''' parse json to return only the new posts
                              
                                      params json: json file of 10 last update post
                                      type json: dict
                                  '''
                                  pass
                                  # DOTO
                              
                              
                              
                              # update per 5 min
                              while True:
                                  print(getUpdate())
                                  time.sleep(60*5)
                              

                              פורסם במקור בפורום CODE613 ב20/04/2017 00:09 (+03:00)

                              תגובה 1 תגובה אחרונה
                              4
                              • 0 מנותק
                                0 מנותק
                                0
                                כתב ב נערך לאחרונה על ידי
                                #23

                                וואוו!
                                מדהים. איזה השקעה!
                                תודה רבה!

                                אעבור על הקוד בע"ה ואני בטוח שאחכים וגם יהיה לתועלת...

                                פורסם במקור בפורום CODE613 ב28/04/2017 00:18 (+03:00)

                                תגובה 1 תגובה אחרונה
                                0

                                • 1
                                • 2
                                בא תתחבר לדף היומי!
                                • התחברות

                                • אין לך חשבון עדיין? הרשמה

                                • התחברו או הירשמו כדי לחפש.
                                • פוסט ראשון
                                  פוסט אחרון
                                0
                                • דף הבית
                                • קטגוריות
                                • פוסטים אחרונים
                                • משתמשים
                                • חיפוש
                                • חוקי הפורום