borzole Napisano Listopad 19, 2009 Zgłoszenie Share Napisano Listopad 19, 2009 Witam, Czy jest możliwość pobrania tylko fragmentu strony np. tylko jednego bloku div? Chciałem sobie zrobić coś na wzór powiadomienia rss z jednej strony i obecnie skrypt ściąga całą stronę, a następnie filtruje wybrany fragment. Ewentualnie czy jest jakiś skaner monitorujący wybrany fragment na stronie. Typowe skanery głupieją jeśli na stronie jest dynamicznie zmieniająca się zawartość z jakiejś kolumny. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
hello_world Napisano Listopad 19, 2009 Zgłoszenie Share Napisano Listopad 19, 2009 Dobrze szanująca się witryna powinna udostępnić kanał rss z takich bloków o częstej aktualizacji Jeżeli nie rss to python, perl ..... Ale na pewno do tych konkluzji sam doszedłeś.Ameryki to ja nie odkryłam Widziałam kiedyś takie możliwości w pythonie ale muszę pogrzebać to przedstawię. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
thof Napisano Listopad 19, 2009 Zgłoszenie Share Napisano Listopad 19, 2009 Najlepiej samemu napisać jakiś parser w dowolnym języku. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
qmic Napisano Listopad 19, 2009 Zgłoszenie Share Napisano Listopad 19, 2009 Web scrapping to się nazywa http://www.packtpub.com/article/web-scraping-with-python Swego czasu zastanawiałem się aby właśnie zrobić taki czytnik RSS dla stron które nie mają RSS, wybierasz blok który chcesz obserwować i jesteś informowany o aktualizacjach)( Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
borzole Napisano Listopad 20, 2009 Autor Zgłoszenie Share Napisano Listopad 20, 2009 eh, znowu ten python, trzeba będzie się go kiedyś naumieć a tymczasem poszedłem po bandzie i zrobiłem najprościej jak się dało w bash jak zwykle #!/bin/bash # na potrzeby cron export PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin #parametry BASE=${0} ARGS=${@} # dzięki temu wystarzy dodać stronę do ulubionych by ją skanować FILE=/home/lucas/.mozilla/firefox/profil.lucas/bookmarks.html #[email protected] MYMAIL=$(my mail) LOG=$HOME/.log # ------------------------------------------------------------------------------------------------- # send_message(){ PAGE=${1} echo ${PAGE} | mutt -s "Zmiany na stronie" ${MYMAIL} } # ------------------------------------------------------------------------------------------------- # funkcje ogólne get_links(){ # w następnych liniach są wyjątki stron, których nie skanujemy grep ${1} ${FILE} | cut -d\" -f2 | cut -d\# -f1 \ | grep -v "http://www.dobreprogramy.pl/Blog.html" } check_changes(){ #wyświetl wsio od drugiego parametru PAGE=${@:2} MARKER=$(${BASE} get_marker_${1} ${@}) DIR=${LOG}/${PAGE%/*} OLD=${LOG}/${PAGE} mkdir -p ${DIR} 2>/dev/null echo -ne ${PAGE} " :: " ${MARKER} if [ -f ${OLD} ]; then # ten warunek potrafi sprawdzić tylko dwie liczby # można to przebudować if [ $(cat ${OLD}) != ${MARKER} ] ; then echo -e " :: ZMIANY " ${BASE} send_message ${PAGE} else echo -e " :: po staremu" fi else echo -e " :: poraz pierwszy" fi # aktualizacja echo -e ${MARKER} > ${OLD} } go(){ get_links ${1} | xargs -i ${BASE} check_changes ${1} '{}' } # ------------------------------------------------------------------------------------------------- # SZABLON dla stron: get_marker_NAZWA(){ get_marker_dobreprogramy.pl(){ # funkcja specyficzna dla danej strony (znacznik), # tutaj np. wyrzuca licznik komentarzy pod danym newsem curl -s ${@} | grep "komentarze (" | cut -d\( -f2 | cut -d\) -f1 # alternatywnie można zliczać ilość znaków w danym fragmencie } # ------------------------------------------------------------------------------------------------- # tu wpisywać kolejne serwisy main(){ ${BASE} go dobreprogramy.pl # żeby skanować inną stronę trzeba zrobić funkcję: get_marker_NAZWA # i uruchomić przez # ${BASE} go NAZWA } # uruchomienie funkcji głównej lub tej z parametru if [ -n "$1" ] ; then ${ARGS} else main fi # wyjście z przekazaniem kodu wyjścia ostatniego polecenia exit $? To działa tylko dla dobreprogramy.pl ale jak się przyjrzeć to łatwo dostosować. Żeby śledzić stronę wystarczy ją dodać do zakładek w firefox. Na początku bawiłem się w jakieś parsery xmlowe żeby konkretnie co i jak się zmieniło ...ale wymiękłem. Za dużo czasu dla zwykłego powiadomienia. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
hello_world Napisano Listopad 20, 2009 Zgłoszenie Share Napisano Listopad 20, 2009 Może to cię zainteresuje http://pl.wikibooks.org/wiki/Zanurkuj_w_Py..._dokumentu_HTML Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
borzole Napisano Listopad 20, 2009 Autor Zgłoszenie Share Napisano Listopad 20, 2009 A tak już zupełnie na koniec. Czy w ogóle jest możliwe pobierania części strony? Wczoraj się bawiłem php+curl i patrząc na czas odpowiedzi to jednak te metody sprowadzają się chyba zawsze do tego samego: ściągnij całą stronę i wyłuskaj żądany fragment. Nie jestem pewny, ale chyba tylko nagłówek strony można ściągnąć osobno. Rzuci ktoś na to światło? Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
menth0l Napisano Listopad 20, 2009 Zgłoszenie Share Napisano Listopad 20, 2009 Może to cię zainteresuje http://pl.wikibooks.org/wiki/Zanurkuj_w_Py..._dokumentu_HTML Ja tam zdecydowanie wolę parsowanie dokumentów DOM. Bardziej czytelnie i mniej pisania. Parsowanie "liniowe" ma w zasadzie tylko tą zaletę, że zużywa mniej pamięci. Obecnie w w moim Djangowym projekcie używam biblioteki lxml, a dokładnie: from lxml.html import parse, fromstring Jedna z tych funkcji pobiera html z pliku, druga ze stringa. Potem już tylko operujemy na węzłach xml-owego drzewa, najlepiej za pomocą XPath. Wyciągnięcie elementów DIV to wtedy jedna linijka kodu: divs = rootnode.xpath('.//div') Borzole: naprawdę polecam pythona, jeden z najbardziej elastycznych języków jakie w życiu widziałem Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
borzole Napisano Listopad 20, 2009 Autor Zgłoszenie Share Napisano Listopad 20, 2009 Potknąłem się dzisiaj o groovy i jeśli chodzi o parsowanie czystego xml to demon nie język, przykład: http://www.ibm.com/developerworks/java/library/j-pg05199/ ale jak tylko chciałem obrabiać stroną xhtml to porażka. Zupełnie nie umiem się tym obsługiwać Chyba mam hobby na następne pół roku ( python mnie jakoś nie wzrusza, ale ten groovy bajkowy). Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
menth0l Napisano Listopad 21, 2009 Zgłoszenie Share Napisano Listopad 21, 2009 Ano widzisz, lxml radzi sobie z (x)html-em Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
borzole Napisano Grudzień 10, 2009 Autor Zgłoszenie Share Napisano Grudzień 10, 2009 Jakoś tak dziś przypadkiem znalazłem proste narzędzie xml_grep Zagatka co to #!/bin/bash tmpfile="http://fedora.pl/" # znaleźć ścieżkę za pomocą firebug'a xpath="/html/body/div/div[4]/ul/ul" xml_grep -t "$xpath" $tmpfile 2>/dev/null Nadal nie jest idealnie, ale coś działa. Wcześniej na siłę próbowałem xmlstarlet ale tylko czysty xml działał. [EDIT] Ostatecznie wygląda to tak (bez xml_grep): http://dl.dropbox.com/u/409786/pub/bin/dp.sh 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ę