Seite 1 von 1

Proxy List

Verfasst: Montag 21. September 2009, 19:03
von microkernel
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!"

Verfasst: Montag 21. September 2009, 19:14
von BlackJack
@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``!?

Verfasst: Montag 21. September 2009, 19:38
von cofi
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

Verfasst: Montag 21. September 2009, 20:08
von EyDu

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>
;-)

Verfasst: Dienstag 22. September 2009, 06:47
von stuhlbein
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,}$
=)

Verfasst: Dienstag 22. September 2009, 08:34
von jens
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.