Jakiś czas temu
opisywałem tu moje eksperymenty mające na celu ustalenie trwałości dysków SSD w EEE PC.Jak napisałem w update'cie dyski SSD chronią się przed ciągłym zapisem do tych samych komórek.Przekonałem się o tym jakiś tydzień temu gdy w celu zdobycia danych do pewnego eksperymentu napisałem na EEE PC i uruchomiłem nań program w Pythonie. Program miał na celu wejść na stronę
wykop.pl, pobrać listę linków, wejść na każdy z nich i pobrać listę osób które wykopały link i listę osób które go zakopały. Później program zapisywał w pliku danej osoby linkę którą wykopała, lub zakopała. Ogólnie polegało to więc na tym, że program co chwilę otwierał pliki i dopisywał do nich nowe linie...I ciekawa sprawa :-) najpierw wszystko działało całkiem sprawnie, aż od pewnego momentu, od tego momentu wszystko szło szybko, po czym zawisało na kilka-kilkanaście sekund i znów szło szybko :-)Wniosek stąd taki, że programy na EEE PC które intensywnie piszą do tych samych obszarów dysku mogą szybko spodziewać się tego, że dostaną zadyszki i większość czasu spędzą na oczekiwaniu na przeniesienie różnych obszarów dysku na SSD :-)Jak ktoś ciekawy tutaj źródło skanera ;-) Przechodzi teoretycznie przez pierwsze 100 stron wykop.pl i buduje na dysku mapę głosowań użytkowników. W pliku [nazwa usera].digg jest lista linków na które głosował, a pliku [nazwa użytkownika].dugg jest lista linków które zakopał. Przed ewentualnym uruchomieniem programu należy sprawdzić w pliku
robots.txt wykopu czy te działania są dozwolone [teraz są].
import urllib2#http://www.wykop.pl/kategoria/wszystkie/1def getText(addr): print addr handler = urllib2.urlopen(addr) s=handler.read() return sdef getLines(addr): #handler = urllib2.urlopen(addr) #s=handler.read().split("\n"); s=getText(addr).split("\n") return sdef getUsers(lines): searchedText = "http://www.wykop.pl/ludzie/" list = [] for i in range(1,len(lines)): if lines[i].find(searchedText)!=-1: q=lines[i].find(searchedText) s=lines[i][q+len(searchedText):] q2=s.find('"') item=s[:q2] print(item) list.append(item) return list def analyze(id): addr="http://www.wykop.pl/link/"+id+"/" text = getText(addr) addrLen = len(addr) q=text.find(addr) s=text[q+addrLen:] q=s.find('"') s=s[1:q]+"/" print s linkDigg = addr+s+"/wykopali" diggLines = getLines(linkDigg) diggUsers = getUsers(diggLines) for name in diggUsers: f=open(name+".digg","a") f.write(id+"\n") f.close() linkDugg = addr+s+"/zakopali" duggLines = getLines(linkDugg) duggUsers = getUsers(duggLines) for name2 in duggUsers: f=open(name2+".dugg","a") f.write(id+"\n") f.close() for i in range(1,100): addr="http://www.wykop.pl/kategoria/wszystkie/"+str(i) print addr s=getLines(addr) print(len(s)) for il in range(1,len(s)): if s[il].find("linkid")!=-1: print s[il] q=s[il].find('"linkid-')+8 s2=s[il][q:] q=s2.find('"') id=s2[:q] print id analyze(id)
Żeby było zabawniej program zawiera błąd, ale i tak działa ;-) Błąd polega na zbyt dużym obcięciu części adresu potrzebnego do uzyskania listy wykopywaczy i zakopywaczy. Widać jednak wykop.pl potrzebuje w tym miejscu tylko jakichś liter, nie ważne czy takich samych na jakie kieruje usera.
Podobne postybetaJak walczyć z gigantycznym kodem w Java'ie, część 1 ;-)Jak zrobić plik OVPN (dla OpenVPN) w wersji unified format?Jak nie zapomnieć kupić biletu miesięcznego - revised ;-)Polowanie na Nexus 4 - wersja automagiczna ;-)Jak nie zapomnieć kupić biletu miesięcznego ;-)
Brak komentarzy:
Prześlij komentarz