Seite 1 von 1

Brauche hilfe, mein Parser für inet ist zu langsam Thread

Verfasst: Montag 16. Juli 2007, 20:42
von Heizer

Code: Alles auswählen

from httplib import *
import re
import urllib
import thread
import threading
import time
from pprint import pprint
import Queue

class Parser :


  # durchsucht,gefunden

    def __init__(self,adresse):
        self.lauf_zeit_max = 0
        self.adress     = adresse
        self.tiefe        = 0
        self.tief_max     = 13
        self.feld         = []
        self.durchsucht   = 0
        self.gefunden     = 0
        self.all_threads  = []
        self.ins_file    =  file("inserate_id_nummer_des inserates.txt", "w")
        self.anfang = "" #time.clock()

    def find_Kategorie_url(self,txt):
        try:
          feld = []
          linkmuster = re.compile('href="(.+?)(.kijiji.)[a-z]{2,5}/f-[a-z-]*(.+?)"')
          return url_iter
        except: print""

    def find_url(self, txt):
     try:
      linkmuster = re.compile('href="(.+?)(.kijiji.)[a-z]{2,5}/f-[a-z-]*(.+?)"')
      url_iter=re.finditer(linkmuster,txt)

      return url_iter

     except:
       print ''
      # print 'find url: Kann die Seite nicht \xf6ffnen '+adress

    def find_webseit(self, adress):

     try:

      Fp = urllib.urlopen(adress)
      return Fp.read()
     except  :

   #   print 'Kein Internet Zugrief mit urllib'
       try:
        verb=HTTPConnection(adress)#,proxies=proxies)
        verb.request('GET','/\S.\S{2.6}')
        antwort=verb.getresponse()
        return antwort.read()
       except :
          print ''
    #   print 'Keine Internet Zugrief mit htmllib'


    def textfiltern(self, txt):

     filter=""
     if (txt.find("<div><strong>Anzeigennummer: </strong>")!=-1):
     # print "seite gefunden"
      mat_help=txt.split("<title>")
      mat_help1=mat_help[1].split("</title>")
      filter = mat_help1[0]
     return filter

    def find_nummer(self, txt ):
     help = txt.split("<div><strong>Anzeigennummer: </strong> ")
     nummer = help[1].split("</div>")
     return  nummer[0]

    def find_Stadt_url(self,txt):
        try:
         feld = []
         linkmuster = re.compile('href="(.+?)(.kijiji.)[a-z]{2,5}"')
         print
         url_iter=re.finditer(linkmuster,txt)
         for hit in url_iter :
          help = self.url_sauber(hit.group())
          if help not in feld :
            feld.append(help)
         return sorted(feld)
        except:
           print""

    def parserrun(self):
      datum = time.strftime("Start Zeitpunkt : %x   %X")
      print datum
      self.ins_file.write("\n"+datum+"\n")
      self.parser(self.adress ,self.tiefe,self.tief_max,self.feld,self.all_threads)
      datum = time.strftime("Start Zeitpunkt : %x   %X")
      print datum
      self.ins_file.write( "\n"+datum+"\n")
# speichert die adresen von webSeiten in einem file
# parameter adres .adresse von webseite vod deren es begin zu parsen
# tiefe  auf welcher ebene befindet sich den  parser
# tief_max  die tiefste ebene.
    def parser(self,adress,tiefe,tief_max,feld,all_threads):
        aktuel = 0
        aktuel = time.clock()
      #  if((aktuel - self.anfang )<self.lauf_zeit_max)and (not adress in feld):
        print "Anzahl gefunden  Inseraten : " ,  self.gefunden , " Ebene : " ,tiefe, " Durchsucht : " , self.durchsucht

        self.durchsucht=self.durchsucht+1
        if(tief_max>tiefe) and (not adress in self.feld):
          tiefe = tiefe+1
          try:
            self.durchsucht=self.durchsucht+1
            webtext = self.find_webseit(adress)
            if (webtext.find("<div><strong>Anzeigennummer: </strong>")!=-1) and webtext!=None:
                self.gefunden=self.gefunden+1
                self.ins_file.write (self.find_nummer(webtext ))
                self.ins_file.write("\n"+adress+"\nTitel : "+webtext+"\n")
                datum = time.strftime("%X")
                self.ins_file.write(datum+"\n")

            self.feld.append(adress)
            for hit in self.find_url(webtext):
               txt= hit.group()
               tst = txt.replace('"'," " )
               fld = tst.split(" ")
             #  help_txt= fld[1]. split("")
               if re.search('kijiji.de', fld[1])!=None :
                if not fld[1] in feld:
                 try:
                  the_thread = threading.Thread(target=self.parser,name=fld[1],args=(fld[1],tiefe,tief_max,feld,self.all_threads))
                  the_thread.start()
                  the_thread.join()
                #  all_threads.append(the_thread)
                 except "fd" :
                  er=er+1
         #   for t in self.all_threads:
           #    t.join()
          except "fd":
              er=er+1

    def inseratspeichern(self,url,txt):
        self.ins_file.write(url+ "\n" + txt+"\n")




prs   =  Parser("http://www.kijiji.de/")
prs.parserrun()

das ist meine Implemetierung es soll nach anzeigen im Portal suchen und die abschpechern

bei Dieser Variante ist er zu langsam wenn ich die Schleife unter aktiviere dan kommen komische meldungen und es wird nichts Geschpeichert.

kann mir jemand dabei Helfen bin erts anfänger mit THreading ich habe hier in Forum nachgeschaut aber trozdem verschtee nicht wo bei mir die Probelm liegt.

ich brauche dringend hilfe. bitte.

Edit (Leonidas): Python highlighting eingeschaltet.