Proxy List

Code-Stücke können hier veröffentlicht werden.
Antworten
Benutzeravatar
microkernel
User
Beiträge: 271
Registriert: Mittwoch 10. Juni 2009, 17:27
Wohnort: Frankfurt
Kontaktdaten:

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

@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``!?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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

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

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,}$
=)
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten