Seite 1 von 1

non-greed regex compilieren

Verfasst: Freitag 1. Dezember 2006, 16:00
von Costi
ich weis nicht ob, ich regex in pzthon richtig werstanden habe
re.compile compilert anscheinend eine non-greedy pattern, wahrend man mit re.search und re.match sich ausuchen kann ob man greedy oder non-greedzs haben will, brauche aber in meinen fall eine compilierte greedy pattern


wie geht das?

danke

ps: shadet sicher auch nicht wenn ich mein bisherigen code hoer einfuege:

Code: Alles auswählen

from socket import *
import urllib2
import re


se = [
	{
	"host": "www.google.de",
	"path": "/search",
	"keyword": "q",
	"regex": re.compile('<a class=l href=".+">'),
	"pageName": "start",
	"pageAdd": 100,
	"pageInit":	0,
	"aufJeden": {"num": 100, "filter": "off"}
	},
	{
	"host": "search.live.com", #immer nur 10 ergebnisse auf einmal, mit cookies waeren 50 moeglich
	"path": "/results.aspx",
	"keyword": "q",
	#"regex": re.compile(t4ht),
	"pageName": "first",
	"pageAdd": 50,
	"pageInit":	1,
	"aufJeden": {}
	}
	]

	
def mkKeyword():
	return "lol"

class Search:
	def __init__(self, ARG):
		self.ARG = ARG
		self.not_urls = 0
		self.current_page = self.ARG["pageInit"]
		self.keyword = "fd"
	
	def _dict2cgi(self, dict):
		retval = "?"
		for key, val in dict.iteritems():
			retval += key + "=" + str(val) + "&"
		return retval[:-1]
	
	def _get(self, arg):#nein, kein urllib2
		arg = self._dict2cgi(arg)
		s = socket(AF_INET, SOCK_STREAM)
		print "httpGetting..."
		s.connect((self.ARG["host"], 80))
		s.send("GET " + self.ARG["path"] + arg + " HTTP/1.1\n")
		s.send('Host: ' + self.ARG["host"])
		s.send('\n\n')
		resp = ''
		while not '</html>' in resp:
			resp += s.recv(1024)
		return resp
	
	def _parse(self, resp):
		print self.ARG["regex"]
		return self.ARG["regex"].findall(resp)
	
	def __call__(self):
		if self.not_urls == 1:			
			self.keyword = mkKeyword()
			current_page = self.ARG["pageInit"]
		elif self.not_urls == 2:
			return "ausgedient"
		
		z = self.ARG["aufJeden"]
		z.update({self.ARG["pageName"]: self.current_page, self.ARG["keyword"]: self.keyword})
		print z
		resp = self._get(z) #  + mit dicts?
		urls = self._parse(resp)
		if not urls:
			self.not_urls += 1
			print "keine urls"
		self.current_page += self.ARG["pageAdd"]
		return urls


print Search(se[0])()
"""
sObjs = []
for i in se:
	sObjs.append(Search(i))

while 1:
	for i in sObjs:
		print i()

"""


Re: non-greed regex compilieren

Verfasst: Freitag 1. Dezember 2006, 17:05
von Leonidas
Costi hat geschrieben:ich weis nicht ob, ich regex in pzthon richtig werstanden habe
Nein, hast du nicht. Ich denke sogar, du hast reguläre Ausdrücke allgemein nicht verstanden.
Costi hat geschrieben:re.compile compilert anscheinend eine non-greedy pattern, wahrend man mit re.search und re.match sich ausuchen kann ob man greedy oder non-greedzs haben will, brauche aber in meinen fall eine compilierte greedy pattern
re.compile kompiliert Patterns. Punkt. Ob sie greedy ist oder nicht, ist re.compile egal, weil es sowas wie greedy und non-greedy Patterns gar nicht gibt. Operatoren können greedy und non-greedy sein. Daher musst du in deiner Pattern non-greedy Operatoren nutzen.

Und was re.match() vs. re.search() angeht gibt es die Seite Matching vs Searching direkt in der Dokumentation. Übrigens bringen kompiliere Patterns ihr eigenes match() und search() mit.

P.S.: Deinen Code habe ich mir nicht angeschaut, der ist ähmm.. sehr suboptimal.

Verfasst: Freitag 1. Dezember 2006, 17:49
von Costi
Und was re.match() vs. re.search() angeht gibt es die Seite Matching vs Searching direkt in der Dokumentation. Übrigens bringen kompiliere Patterns ihr eigenes match() und search() mit.
asooo, thx, ok jetzt hat die welt einen neuen sinn für mich^^
Deinen Code habe ich mir nicht angeschaut, der ist ähmm.. sehr suboptimal.
..und damit selbstdukumentierend und übersichtlich
dat hat aber schon alles seinen sinn, bin noch läönsgt nicht fertig

gruesse
costi

Verfasst: Freitag 1. Dezember 2006, 18:24
von Leonidas
Costi hat geschrieben:
Deinen Code habe ich mir nicht angeschaut, der ist ähmm.. sehr suboptimal.
..und damit selbstdukumentierend und übersichtlich
Verwirrende Namensgebung, schlechte Reimplementation von HTTP 1.1 etc. würden es eher treffen.

Verfasst: Freitag 1. Dezember 2006, 20:00
von Joghurt
Leonidas hat geschrieben:schlechte Reimplementation von HTTP 1.1 etc. würden es eher treffen.
falsche Reimplementation von HTTP 1.1 trifft es am besten.
RFC 2616 hat geschrieben:HTTP/1.1 defines the sequence CR LF as the end-of-line marker for all protocol elements
Also \r\n statt \n

Verfasst: Freitag 1. Dezember 2006, 20:35
von Costi
probiert doch keinen kuchen, der noch nicht gebacken wurde

ich poste dan den script dann nochmal wen es fertig ist ( ;

Verfasst: Freitag 1. Dezember 2006, 20:37
von birkenfeld
Wenn es größer wird, dann aber bitte auf http://paste.pocoo.org ;)

Wenn wir dein Skript beurteilen, weil es hier drin steht, ist das ja nicht unsere Schuld...

Verfasst: Freitag 1. Dezember 2006, 21:44
von Leonidas
Joghurt hat geschrieben:
Leonidas hat geschrieben:schlechte Reimplementation von HTTP 1.1 etc. würden es eher treffen.
falsche Reimplementation von HTTP 1.1 trifft es am besten.
Ich will auch noch "unnötig" einwerfen. Siehe SimpleHTTPServer oder Twisted.
Costi hat geschrieben:probiert doch keinen kuchen, der noch nicht gebacken wurde
Das sind Erfahrungswerte: etwas was schon schwach anfängt, wird selten besser. Ist übrigens auch mit schlechten Filmen so.
birkenfeld hat geschrieben:Wenn wir dein Skript beurteilen, weil es hier drin steht, ist das ja nicht unsere Schuld...
Ney, wir können da gar nix dafür.. es ist fast schon ein Zwang 8)

Verfasst: Freitag 1. Dezember 2006, 22:00
von Costi
h will auch noch "unnötig" einwerfen. Siehe SimpleHTTPServer oder Twisted.
wie willst du da simpleHTTP s e r v e r einbinden, soll doch ein client wreden?
ich hatte schon gedacht twisted anzuwenden, ich brauch die hosts aber in 'chunks",

die ganze sache koennen wir aber erst mal zur seite stellen:
ich geh zetzt zu einer party, dh morgen bis 13 ins bett liegen, um danach den ganzen ueberflussigen, langweiligen, anstrengenden, zeitraubenden schullschrott zu machen und dan am sonntag einen "familienprogramm" zu planen, der immer irgendwie den ganzen tag lang dauert. im laufe der woche werd ich dan sowieso

auch verdammt, hab mich jetzt verplappert

naja ok also erstmal jetzt party...


cu


[/quote]

Verfasst: Freitag 1. Dezember 2006, 22:19
von Leonidas
Costi hat geschrieben:wie willst du da simpleHTTP s e r v e r einbinden, soll doch ein client wreden?
So:

Code: Alles auswählen

import SimpleHTTPServer
Aber hast schon recht, hab da nicht aufgepasst beim Schreiben. Dafür würde nämlich sogar die urllib reichen.

Verfasst: Samstag 2. Dezember 2006, 10:33
von sape
Wieso so Zynisch die ganze Woche?

Verfasst: Samstag 2. Dezember 2006, 12:46
von Costi
Wieso so Zynisch die ganze Woche?
hmmm weis ich auch nicht, ist aber auf jeden fall nicht unhoefflich/unfreundlich gemeint

Verfasst: Samstag 2. Dezember 2006, 15:44
von sape
Costi hat geschrieben:
Wieso so Zynisch die ganze Woche?
hmmm weis ich auch nicht, ist aber auf jeden fall nicht unhoefflich/unfreundlich gemeint
Ich meinte auch nicht dich damit.

Verfasst: Samstag 2. Dezember 2006, 16:39
von Leonidas
XtraNine hat geschrieben:Ich meinte auch nicht dich damit.
Tja, viel zu tun, vieles das liegen bleibt bzw. den geplanten Zeitrahmen bei weitem sprengt, vieles das gar nicht vorran geht. Motivation im Keller - da brauch ich manchmal sowas (außerdem finde ich das gar nicht so böse, in einem anderen Thread letztens habe ich mich schon stark zusammenreissen müssen obwohl da was zu schreiben sehr viel Spaß gemacht hätte).

Und mei, ich werd mich doch grad noch mal verschreiben dürfen und statt urllib den SimpleHTTPServer anbieten dürfen - klar ist sowas peinlich, aber darauf groß rumzureiten?

schöne grüße vom Leonidas der langsam zum meandtheshell des Python-Forums mutiert ;)