thof Napisano Styczeń 6, 2012 Zgłoszenie Share Napisano Styczeń 6, 2012 Dzisiaj akurat musialem uzyc proxy i troche to denerwujace jak duzo tych darmowych proxy w internecie nie dziala. Postanowilem napisac skrypt, który sprawdzi kilka proxy za mnie. Ale zeby nie bylo latwo to nie napisalem go w niesmiertelnym shellu (bashu), ale w modnym ostatnio Pythonie Nigdy wczesniej nie pisalem nic w Pythonie i kompletnie nie znam tego jezyka, ale dokumentacja jest ok i po dwóch godzina cos wyszlo. Wszystko byloby ok, gdyby Python nie zajmowal 70MB na dysku, ale to szczegól w tych czasach. Akurat tu parsuje wyniki ze strony xroxy.com. Wybralem xroxy tylko dlatego, ze pojawila sie jako jedna z pierwszych w google po wpisaniu "proxy germany" i pierwszej z brzegu proxy dziala bardzo fajnie. Wyniki sa posortowane od tych najbardziej niezawodnych (tylko niezawodnosc powyzej 90%). Pobierane sa tylko z jednej strony (10 proxy), co dla mnie jest wystarczajace, ale jakby ktos chcial to moze latwo rozszerzyc na kolejne. Kraj mozna zmienic, wystarczy podac kod w parametrze "country" (teraz DE, czyli Deutschland). Podobnie timeout, jesli zalezy wam na szybkim proxy to mozna zmniejszyc parametr "timeout_s" do dwóch czy nawet jednej sekundy. Z niestandardowych bibliotek uzylem BeautifulSoup, ale na Fedorze pewnie jest z automatu, a jak nie to mozna yumem doinstalowac. Skrypt trzeba odpalac na Pythonie 2.7, czyli prawdopodobnie wywolanie python2 proxychecker.py Na wyjsciu wydrukowane zostana tylko proxy, z uzyciem których udalo sie pobrac strone testowa. Jesli cos pójdzie nie tak z jakims proxy to skrypt przemilczy wyjatek (HTTP lub URL) i bedzie sprawdzal kolejne, nic nie wypisujac na temat niedzialajacych. Kod: from BeautifulSoup import BeautifulSoup import re import urllib2 # parametry url = "http://google.com" # strona do testowania country = "DE" # kraj pochodzenia proxy timeout_s = 5 # timeout w sekundach ip_list = [] port_list = [] proxy_content = urllib2.urlopen("http://www.xroxy.com/proxylist.php?country="+country+"&reliability=9000&sort=reliability") soup = BeautifulSoup(proxy_content) # parsing ip = soup.findAll(['a'],attrs={'href' : re.compile('^/proxy\d+\.htm')}) port = soup.findAll(['a'],attrs={'href' : re.compile('^/proxy-\d+-.+\.htm')}) for p in port: port_list.append(p.contents[0]) for i in ip: m = re.match(r'\d' ,i.contents[0][:-1]) if m: ip_list.append(i.contents[0][:-1]) # checking if len(ip_list)!=len(port_list): print "Something goes wrong!" else: for i, p in zip(ip_list, port_list): try: proxy = urllib2.ProxyHandler({'http': i+":"+p}) opener = urllib2.build_opener(proxy) urllib2.install_opener(opener) response = urllib2.urlopen(url, timeout=timeout_s) print(i+":"+p) except urllib2.HTTPError as e: pass except urllib2.URLError as e: pass Czasami dziwnie potrafi zmulic ten urlopen, ale w koncu ruszy. A Python nawet fajny, chyba bede w nim czesciej pisal. 1 Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się