Strona 1 z 1

[python] Wyszukiwanie konkretnego linka na stronie i przechodzenie na niego

: 27 sierpnia 2015, 14:03
autor: LordRuthwen
Bry.
Piszę sobie taki automacik, który zaloguje mi się na stronkę, wyszuka w treści linka (link codziennie jest inny, znajduje się za to w tej samej klasie), no i mam problem.
Tak wygląda samo logowanie:

Kod: Zaznacz cały

#!/usr/bin/env python
import urllib2
import cookielib
url = 'https://www.TU_JEST_LINK#'
login = {'login':'Log In',
        'email':'uzytkownik@mail.costam',
        'password':'SUPER_TAJNE_HASLO',
        'op':'Login',
        'login':'Log In'}
add_to_chart = {
        }
cookie = cookielib.CookieJar() ## accept cookie
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
opener.addheaders = [('User-agent','Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 5.1)')]
data = urllib.urlencode(login)
try:
    opener.open(url,data,10)
    print 'logged in - success!'
except:
    print 'time out!', url
I teoretycznie działa, na stronie jest link w postaci:

Kod: Zaznacz cały

<div class="float-left get-stuff">
   <a href="/free-get/10235/35237" class="last-stuff-get">
      <div class="stuff-get-token-inner">
         <div class="stuff-get-token-logo"></div>
         <div class="stuff-get-token-separator"></div>
         <input type="submit" class="form-submit" value="Get our last stuff" />
      </div>
   </a>
</div>
Z tego co widzę, to wystarczy mając ciasteczko przejść na link, tylko nie bardzo wiem jak się do tego zabrać, żeby go stamtąd wydobyć.

: 27 sierpnia 2015, 15:24
autor: mariaczi
Nie do końca jestem pewien czy o to Ci chodzi - musisz sparsować HTMLa, np.;
http://stackoverflow.com/questions/1551 ... -in-python
http://stackoverflow.com/questions/9694 ... ific-links

: 27 sierpnia 2015, 16:05
autor: LordRuthwen
Mniej więcej, tylko ja tu używam obiektu opener, nie jestem pewny czy można go wykorzystać do request.
No i ciasteczko musi być :)
Bo inaczej link ma inną wartość.

: 27 sierpnia 2015, 20:08
autor: mariaczi
Jeśli się nie mylę, to:
1. Obsługę cookie odpaliłeś i podpiąłeś pod obiekt opener
2. Zalogowałeś się i potrzeba Ci pobrać zawartość strony (albo nawet ją już masz): page_content = opener.read()
3. Mając page_content wyjmiesz link i raz jeszcze tym samym obiektem opener otworzysz tego linka czyli razem z zainicjowanym cookie

Możliwe, że już to widziałeś, a może Ci jeszcze coś podpowie: http://stackoverflow.com/a/8206372
I z dokumentacji (co mi podsunęło punkty powyżej)
https://docs.python.org/2/howto/urllib2.html
https://docs.python.org/2/library/urllib2.html#examples

[edycja]
W ostatniej odpowiedzi na stackoverflow (link z tego posta) jest link do tematu na forum, jak pchnąć cookie ;) Podaje: http://forum.xbmc.org/showthread.php?t=15717

: 27 sierpnia 2015, 21:53
autor: klavierkrk
moze warto pobrac strone przez http request, np. GET a pozniej sparsowac regexpem

: 28 sierpnia 2015, 11:38
autor: LordRuthwen
Dziękuję mariaczi, masz rację, już mam tylko o tym nie wiem:P

Kod: Zaznacz cały

cookie = cookielib.CookieJar() ## accept cookie
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
opener.addheaders = [('User-agent','Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 5.1)')]
data = urllib.urlencode(login)
try:
    strona = opener.open(url,data,10).read()
    print 'logged in - success!'
except:
    print 'time out!', url
claim = claim + re.search("(/[a-z -]*/\d+/\d+)", strona).group(1)
try:
    opener.open(claim,10)
    print 'Success!'
except:
    print 'time out!', claim
I to mi bardzo ładnie parsuje stronę, wyciąga link i na niego przechodzi, wychodzi jednak na to, że albo nie trzyma ciasteczka, albo mam skopane logowanie, muszę jeszcze sprawdzić.

: 28 sierpnia 2015, 12:10
autor: mariaczi
Przed otwarciem wyciągniętego linka dodaj zawartość z obiektu cookie do nagłówka:

Kod: Zaznacz cały

opener.addheaders('Cookie', cookie)
i... Chyba tego brakuje :)