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()
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.