X


Jednak ponieważ w kodzie źródłowym znajduje się tylko jeden obszar tekstowy, wystarczy go znaleźć i zapisać w nim odpowiednie dane...

Jak cię złapią, to znaczy, że oszukiwałeś. Jak nie, to znaczy, że posłużyłeś się odpowiednią taktyką.
Nie jest to wymyślna technika, ale nieco różni się od zastosowanego wcześniej podejścia .
Po dodaniu informacji trzeba tylko wirtualnie kliknąć przycisk do wysyłania formularza. Programiści firmy Google prawidłowo nazywają przyciski, dlatego wystarczy pobrać odpowiednią nazwę i użyć jej w metodzie click . I to już wszystko — język Ruby jest fantastyczny!
44. Wydobywanie odnośników
linkScrape.rb Wydobywanie odnośników ze stron WWW ma wiele zastosowań. Można to zro-bić — podobnie jak w przypadku innych zadań — na wiele sposobów. W roz-
dziale 2. zobaczyłeś skrypt do sprawdzania poprawności odnośników w witrynie.
Z uwagi na konieczność walidacji odsyłaczy program ten wymagał większej liczby wierszy kodu niż skrypt, który musi tylko wydobyć wszystkie odnośniki. Nie zamierzam tworzyć tu robota sieciowego, jednak opiszę kilka jego podstawowych komponentów. Pierwszy z nich to mechanizm wydobywania odnośników.
Kod
require 'mechanize'
unless ARGV[0]
puts "Musisz podać adres witryny."
puts "Sposób użycia: ruby linkScrape.rb "
exit
end
agent = WWW::Mechanize.new
agent.set_proxy('localhost',8080)
148 Rozdział 7
begin
page = agent.get(ARGV[0].strip)
page.links.each do |l|
if l.href.split("")[0] =='/'
puts "#{ARGV[0]}#{l.href}"
else
puts l.href
end
end
rescue => e
puts "Wystąpił błąd."
puts e
retry
end
Uruchamianie kodu
W celu uruchomienia skryptu wpisz następujące polecenie:
ruby linkScrape.rb http://przetwarzany_adres_url.com/
Dane wyjściowe
Skrypt wyświetla listę wszystkich odnośników znalezionych na stronie o podanym adresie URL. Ja wydobyłem odsyłacze ze strony http://www.nostarch.com/
main_menu.htm.
index.htm
interactive.htm
catalog.htm
gimp.htm
wheretobuy.htm
inkscape.htm
about.htm
js2.htm
jobs.htm
eblender.htm
media.htm
oophp.htm
http://www.nostarch.com/blog/
wpdr.htm
http://ww6.aitsafe.com/cf/
webbots.htm
review.cfm?userid=8948354
google.htm
abs_bsd2.htm
growingsoftware.htm
openbsd.htm
rootkits.htm
freebsdserver.htm
hacking2.htm
debian.htm
voip.htm
howlinuxworks.htm
firewalls.htm
appliance.htm
securityvisualization.htm
lcbk2.htm
silence.htm
lme.htm
stcb4.htm
nongeeks.htm
scsi2.htm cisco.htm
lps.htm
cablemodem.htm
S e r we r y i w y d o b y w a ni e da n yc h
149
mug.htm
xbox.htm
ubuntu_3.htm
insidemachine.htm
imap.htm
nero7.htm
pf.htm
wireless.htm
postfix.htm
creative.htm
webmin.htm
ebaypg.htm
endingspam.htm
ebapsg.htm
cluster.htm
geekgoddess.htm
nagios.htm
wikipedia.htm
nagios_2e.htm
indtb.htm
pgp.htm
sayno.htm
packet.htm
networkknowhow.htm
tcpip.htm
sharing.htm
assembly.htm
apple2.htm
debugging.htm
newmac.htm
qt4.htm
cult_mac.htm
vb2005.htm
ipod.htm
vsdotnet.htm
art_of_raw.htm
codecraft.htm
firstlego.htm
hownotc.htm
flego.htm
idapro.htm
legotrains.htm
mugperl.htm
sato.htm
gnome.htm
nxt.htm
plg.htm
nxtonekit.htm
ruby.htm
zoo.htm
vbexpress.htm
legobuilder.htm
wcj.htm
nxtig.htm
wcps.htm
vlego.htm
wcphp.htm
mg_databases.htm
wcruby.htm
mg_statistics.htm
wcss.htm
eli.htm
greatcode.htm
index.htm
greatcode2.htm
wpc.htm
Jak działa ten skrypt?
Porównaj kod tego programu ze skryptem 10. — „Weryfikator odnośników do stron w sieci”. Widać dużą różnicę, prawda? Zawsze warto przemyśleć problem i starać się rozwiązać go w najprostszy możliwy sposób. Niektóre z najbardziej eleganc-kich rozwiązań w ogóle nie są skomplikowane. Przedstawiony skrypt jedynie wydobywa odnośniki ze strony bez sprawdzania ich poprawności i wykonywania innych zadań. Biblioteka mechanize to następne narzędzie często używane do interakcji z internetem . Skrypt po standardowej instrukcji do obsługi błędów tworzy nowy obiekt agent typu mechanize . Aby dostosować ten obiekt do potrzeb programisty, program ustawia atrybut pośrednika na lokalny program Paros, 150 Rozdział 7
którego używam. Jeśli nie chcesz korzystać z narzędzia tego rodzaju, usuń ten wiersz kodu. Następnie skrypt używa metody get obiektu agent do pobrania zawartości strony . Ciekawą cechą biblioteki mechanize jest automatyczne kategoryzowanie pobranych informacji. Wyszukiwanie specyficznych elementów strony za pomocą tej biblioteki znacznie ułatwia życie programistom języka Ruby.
W zmiennej page znajduje się tablica links. Dzięki bibliotece mechanize odno-
śniki są już przetworzone. Podobnie jak przy korzystaniu z każdej innej tablicy można użyć metody each do przejścia po wszystkich elementach tablicy links.
Pamiętaj, że elementy link zawierają nie tylko adres URL każdego odnośnika, ale też inne atrybuty zdefiniowane w kodzie źródłowym. Tu potrzebny jest tylko atrybut href, aby skrypt mógł wyświetlić go w konsoli . Jeśli chcesz wydobyć informacje z dużej witryny, powinieneś zapisać dane w pliku, ale wybór podejścia należy do Ciebie. Po wyświetleniu odnośników skrypt kończy działanie.
Modyfikowanie skryptu
Istnieje kilka innych ciekawych narzędzi sieciowych, które przetwarzają strony w podobny sposób. Są to na przykład Hpricot ( http://wiki.github.com/why/hpricot/) i Rubyful Soup ( http://www.crummy.com/software/RubyfulSoup/). Wypróbuj je, aby znaleźć narzędzie dostosowane do własnych potrzeb.
45. Wydobywanie rysunków
imageScrape.rb Ten skrypt wydobywa każdy rysunek ze strony o adresie URL podanym przez użytkownika. Pobierane pliki graficzne obejmują obrazki znajdujące się na serwerze danej strony, a także rysunki dołączane z innych serwerów sieciowych.
Kod
require "open-uri"
require "pathname"
unless ARGV[0]
puts "Musisz podać adres URL, aby wydobyć rysunki."
puts "Sposób użycia: ruby imageScrape.rb "
exit
end
url = ARGV[0].strip
begin
open(url, "User-Agent" => "Mozilla/4.0 (compatible; MSIE 5.5; Windows
´98)")
do |source|
source.each_line do |x|
if x =~ /name = $1.split('"').first
S e r we r y i w y d o b y w a ni e da n yc h
151
name = url + name if Pathname.new(name).absolute?
copy = name.split('/').last
File.open(copy, 'wb') do |f|
f.write(open(name).read)
end
end
end
end
rescue => e
puts "Wystąpił błąd – spróbuj ponownie."
puts e
Uruchamianie kodu
Uruchom skrypt przez wpisanie poniższej instrukcji:
ruby imageScrape.rb http://przetwarzany_adres_url.com/
Dane wyjściowe
Ten skrypt pobiera wszystkie rysunki znalezione na stronie o podanym adresie URL. Ja włączyłem przetwarzanie strony http://www.ruby-lang.org/ i pobrałem dwa obrazki: logo.gif (logo języka Ruby) i download.gif (rysunek-odnośnik, który pozwala pobrać język Ruby).
Jak działa ten skrypt?
Wątki
Powered by wordpress | Theme: simpletex | © Jak cię złapią, to znaczy, że oszukiwałeś. Jak nie, to znaczy, że posłużyłeś się odpowiednią taktyką.

Drogi uĚźytkowniku!

W trosce o komfort korzystania z naszego serwisu chcemy dostarczać Ci coraz lepsze usługi. By móc to robić prosimy, abyś wyraził zgodę na dopasowanie treści marketingowych do Twoich zachowań w serwisie. Zgoda ta pozwoli nam częściowo finansować rozwój świadczonych usług.

Pamiętaj, że dbamy o Twoją prywatność. Nie zwiększamy zakresu naszych uprawnień bez Twojej zgody. Zadbamy również o bezpieczeństwo Twoich danych. Wyrażoną zgodę możesz cofnąć w każdej chwili.

 Tak, zgadzam się na nadanie mi "cookie" i korzystanie z danych przez Administratora Serwisu i jego partnerĂłw w celu dopasowania treści do moich potrzeb. Przeczytałem(am) Politykę prywatności. Rozumiem ją i akceptuję.

 Tak, zgadzam się na przetwarzanie moich danych osobowych przez Administratora Serwisu i jego partnerĂłw w celu personalizowania wyświetlanych mi reklam i dostosowania do mnie prezentowanych treści marketingowych. Przeczytałem(am) Politykę prywatności. Rozumiem ją i akceptuję.

Wyrażenie powyższych zgód jest dobrowolne i możesz je w dowolnym momencie wycofać poprzez opcję: "Twoje zgody", dostępnej w prawym, dolnym rogu strony lub poprzez usunięcie "cookies" w swojej przeglądarce dla powyżej strony, z tym, że wycofanie zgody nie będzie miało wpływu na zgodność z prawem przetwarzania na podstawie zgody, przed jej wycofaniem.