Jak wyciągać dane ze stron internetowych... Jeden ze sposobów ;)
Dzisiaj krótka lekcja z mojej strony. Zapraszam do wspólnej zabawy. Nagroda czeka!
reddigg z- #
- #
- #
- #
- #
- 156
Dzisiaj krótka lekcja z mojej strony. Zapraszam do wspólnej zabawy. Nagroda czeka!
reddigg z
Komentarze (156)
najlepsze
Prawy klawisz myszy --> Zapisz jako.
Pewnie to jakiś skrypt dzięki któremu będzie automatycznie wykopywać swoje znaleziska!
Komentarz usunięty przez moderatora
$fg = file#get#content('http://www.wykop.pl/ranking/');
preg#match#all('/http:\/\/www.wykop.pl\/ludzie\/(.+?)" title=\"(.+?)\">(.+?)!\"(.+?)\"\")(.+?)(.+?)<\/span>/', $fg, $w);
$foty = $w[5];
printr($foty);
(niestety wykop zjazda wiec zamiast _ daje #
Rebol []
listaludzi: []
urlprofil: "http://www.wykop.pl/ludzie/"
parse read http://www.wykop.pl/ranking/ [any [thru "dodane przez" copy ludzie to "^">" (append listaludzi ludzie)] to end]
foreach czlowiek listaludzi [
if error? try [
parse read to-url trim/all rejoin [url_profil czlowiek] [thru "url(" copy text to ")"]
plik: parse text "."
print czlowiek
write/binary to-file rejoin [czlowiek last plik] read/binary to-url text
][]
]
Oczywiście,
Sam interpreter pod Windows to jakieś 300kB.
Nie potrzeba instalować żadnych dodatkowych bibliotek oraz kod jest całkowicie przenośny.
nalepsze są funkcje w stylu: clearTablica albo doZestawienie
;)
No i udało Ci się - wrócę tu za tydzień, jak już skończy się kucie kodeksów ;)
require 'net/http'
Net::HTTP.get('www.wykop.pl', '/ranking').scan(/alt="(.+)" src="(.+)"/).each {|nick, url| open(nick + ".jpg", 'wb') {|f| f.write Net::HTTP.get URI.parse url } }
Kto da krócej? Nie trawię tego Rebola.
Twój przykład wyciąga awatary bezpośrednio ze strony rankingu, mój wyciąga je z profili użytkownika, dzięki temu korzystam z ich największej wersji dostępnej w "chmurce"
Poza tym różnica jest w parsowaniu - wyrażenia regularne są trochę dłuższe, ale szybsze i w prostych przypadkach dają radę.
Obejście:
Net::HTTP.get('www.wykop.pl', '/ranking').scan(/alt="(.+)" src="(.+)"/).each {|nick, url| open(nick + ".jpg", 'wb') {|f| f.write Net::HTTP.get URI.parse url.grep 'hi.', 'big.' } }
Z drugim zapytaniem - dłuższe (240 znaków z 160):
Net::HTTP.get('www.wykop.pl', '/ranking').scan(/dodane przez ([^\"]+)/).each {|nick| open(nick.first + ".jpg", 'wb') {|f| f.write
Komentarz usunięty przez moderatora