Code-Stücke können hier veröffentlicht werden.
microkernel
User
Beiträge: 271 Registriert: Mittwoch 10. Juni 2009, 17:27
Wohnort: Frankfurt
Kontaktdaten:
Montag 21. September 2009, 19:03
Hier mal ein kleines script welches proxies sammelt (für wen's interesiert....):
Code: Alles auswählen
import urllib
import re
class ProxyListMaker():
def __init__(self):
self.counter = 1
self.std_URL = "http://www.samair.ru/proxy/proxy-NR.htm"
self.finder = re.compile(r"[0-9]{1,}.[0-9]{1,}.[0-9]{1,}.[0-9]{1,}:[0-9]{2,}")
def getData(self):
counter_ = "0" + str(self.counter)
URL = self.std_URL.replace("NR", str(counter_))
sock = urllib.urlopen(URL)
data = sock.read()
sock.close()
return data
def getAndWriteIPs(self):
data = self.getData()
proxies = re.findall(self.finder, data)
writer = open("proxies.txt", "a")
for proxy in proxies:
writer.write(proxy + "\n")
writer.close()
def collectProxies(self):
for self.counter in range(1, 40, 1):
print "Getting Proxies from page: %s" % str(self.counter),
self.getAndWriteIPs()
self.counter += 1
print "Getted!"
BlackJack
Montag 21. September 2009, 19:14
@microkernel: Gruselige Verwendung einer Klasse würde ich sagen. Warum stecken die Funktionen in einer Klasse? Warum dieses "globale" `counter`? Was soll der Unterstrich bei `counter_`? Das sinnlose ``self.counter += 1``!?
cofi
Python-Forum Veteran
Beiträge: 4432 Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0
Montag 21. September 2009, 19:38
Mal mein (ungetesteter) Ansatz:
Code: Alles auswählen
import urllib
import re
from functools import partial
STD_URL = "http://www.samair.ru/proxy/proxy-{number}.htm"
IP_REGEXP = re.compile(r"[0-9]{1,}.[0-9]{1,}.[0-9]{1,}.[0-9]{1,}:[0-9]{2,}")
def get_proxies(url):
proxies = list()
for number in xrange(1,40):
url = url.format(number=number)
with urllib.urlopen(url) as socket:
proxies.extend(re.findall(IP_REGEXP, socket.read())
return proxies
def main(outfile, url=STD_URL):
proxies = get_proxies(url)
with open(outfile, 'w') as out:
for proxy in proxies:
out.write("{0}\n".format(proxy)
if __name__ == '__main__':
import sys
modes = { 2 : partial(main, sys.argv[1]),
3 : partial(main, sys.argv[1], sys.argv[2])
}
try:
modes[sys.argv]()
except KeyError:
#print usage info
EyDu
User
Beiträge: 4881 Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin
Montag 21. September 2009, 20:08
Code: Alles auswählen
>>> IP_REGEXP = re.compile(r"[0-9]{1,}.[0-9]{1,}.[0-9]{1,}.[0-9]{1,}:[0-9]{2,}")
>>> print IP_REGEXP.match("1a2b3c4:42")
<_sre.SRE_Match object at 0x7f5a085e56b0>
Dann existieren noch "+" und "\d".
Nicht erwähnen muss man wohl so etwas:
Code: Alles auswählen
>>> print IP_REGEXP.match("11111111111111111111111111.2.3.4:42")
<_sre.SRE_Match object at 0x7f5a085e56b0>
Das Leben ist wie ein Tennisball.
stuhlbein
User
Beiträge: 89 Registriert: Freitag 9. Januar 2009, 16:08
Dienstag 22. September 2009, 06:47
EyDu hat geschrieben:
Nicht erwähnen muss man wohl so etwas:
Code: Alles auswählen
>>> print IP_REGEXP.match("11111111111111111111111111.2.3.4:42")
<_sre.SRE_Match object at 0x7f5a085e56b0>
Leicht verändert klappen bei dir genannte Beispiele nichtmehr:
Code: Alles auswählen
^((25[0-5]|2[0-4]\d|1\d{2}|\d{1,2})\.){3}(25[0-5]|2[0-4]\d|1\d{2}|\d{1,2}):[0-9]{2,}$
=)
jens
Python-Forum Veteran
Beiträge: 8502 Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:
Dienstag 22. September 2009, 08:34
Also lustig wird es ja erst, wenn man auch weiß, das die proxies funktionieren...
Was liegt näher als einfach mal versuchen mit dem jeweiligen Proxy eine Webseite abzurufen???
Ich hab mal was gehackt:
http://paste.pocoo.org/show/140938/
EDIT: Hab noch einen einfachen test eingebaut, ob die response Länge auch eine gewisse länge hat.
http://paste.pocoo.org/compare/140939/140938/
Ich hab es nicht genau untersucht, aber ich denke einige Proxies spucken eine Fehlerseite aus, statt die echte Webseite.