Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 30, 2012 00:39:51

n2b
От:
Зарегистрирован: 2011-02-10
Сообщения: 125
Репутация: +  0  -
Профиль   Отправить e-mail  

urllib2, javascript

Привет!

Пишу скриптик и есть необходимость фетчить код страницы с поисковой выдачи рутрекера.
Поисковая выдача выходит при помощи javascript кода.
Вот что делаю:

import urllib
import urllib2
import cookielib
searchText = 'Terminator'
login = 'login'
password = 'pwd'
outf = 'test.txt'
def main():
#    login, password = args
    # prepare opener with cookie handling
    cookies = cookielib.CookieJar()
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookies))
    data = urllib.urlencode({'login_username': login,
                              'login_password': password,
                              'login': ''})
    # login
    opener.open('http://login.rutracker.org/forum/login.php', data)
    
    # search on tracker
    sUrl = 'http://rutracker.org/forum/tracker.php?max=1&nm=%s' % searchText
    handle = opener.open(sUrl, data)
    page = handle.read()
    
#    # open torrent url
#    torrent_url = 'http://dl.rutracker.org/forum/dl.php?t=%s' % topic_id
#    handle = opener.open(torrent_url, data)
    # write it to output file
    out = open(outf, 'wb')
    out.write(page)
    out.close()
    return 0
main()
Вот что получаю:

Для показа необходимo включить JavaScript


Подскажите как сфетчить урл содержащий в себе javascript код.



Офлайн

#2 Сен. 30, 2012 02:43:32

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

urllib2, javascript

Ставишь себе сниффер или HttpFox и смотришь, в каком файле приходят результаты поиска.

И выкинь urllib и возьми что-нибудь нормальное, вроде requests или grab.

Офлайн

#3 Сен. 30, 2012 10:03:33

n2b
От:
Зарегистрирован: 2011-02-10
Сообщения: 125
Репутация: +  0  -
Профиль   Отправить e-mail  

urllib2, javascript

odnochlen
Ставишь себе сниффер или HttpFox и смотришь, в каком файле приходят результаты поиска.

И выкинь urllib и возьми что-нибудь нормальное, вроде requests или grab.

Это я уже сделал. Результаты поиска приходят ко мне в том же файле что я и фетчу, только они на javascript, а этот код urllib2 не хочет фетчить…



Офлайн

#4 Сен. 30, 2012 11:43:51

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

urllib2, javascript

Не знаю где там Javascript, все нормально работает.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests
import lxml.html
 
login = ''
password = ''
search_text = 'Python'
 
s = requests.Session()
r = s.post(
    'http://login.rutracker.org/forum/login.php',
    data={'login_username': login,
          'login_password': password,
          'login': ''}
)
assert u'Вы зашли как:' in r.text
r = s.get('http://rutracker.org/forum/tracker.php', params={'max': 1,
                                                            'nm': search_text})
doc = lxml.html.fromstring(r.content)
for el in doc.cssselect('table#tor-tbl td.row4 div a'):
    print el.get('href'), el.text_content()

Офлайн

#5 Сен. 30, 2012 12:09:45

n2b
От:
Зарегистрирован: 2011-02-10
Сообщения: 125
Репутация: +  0  -
Профиль   Отправить e-mail  

urllib2, javascript

Перевел на граб:

def main():
    g = grab.Grab()
    g.setup(post = {'login_username': login,
                              'login_password': password,
                              'login': ''})
    g.go('http://login.rutracker.org/forum/login.php')
    
    sUrl = 'http://rutracker.org/forum/tracker.php?max=1&nm=123'
    t = g.go(sUrl)
    g.request()
    
    # write it to output file
    out = open(outf, 'wb')
    out.write(t.body)
    out.close()


Тоже самое.

В файле обычная страница а на месте поисковой выдаче : Для показа необходимo включить JavaScript



Офлайн

#6 Сен. 30, 2012 12:32:35

n2b
От:
Зарегистрирован: 2011-02-10
Сообщения: 125
Репутация: +  0  -
Профиль   Отправить e-mail  

urllib2, javascript

reclosedev, js в поисковой выдаче! Выполните поиск по раздачам по ссылке из моего кода и получите код странице с выдачей. Вот там и есть javascript



Офлайн

#7 Сен. 30, 2012 12:48:30

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

urllib2, javascript

Ну значит JS в браузере отключен. Код страницы гляньте, список торрентов там все равно есть. И в моем коде (через cssselect) этот список отображается.

Отредактировано reclosedev (Сен. 30, 2012 12:49:32)

Офлайн

#8 Сен. 30, 2012 15:53:36

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

urllib2, javascript

n2b
 g.setup(post = {'login_username': login,
                              'login_password': password,
                              'login': ''})
    g.go('http://login.rutracker.org/forum/login.php')
Пожалуйста, не делайте больше так! Не надо следовать дебильному примеру из документации.
Весь запрос должен быть описан одним вызовом, setup стоит вызывать только, если конфигурируются параметры для нескольких запросов.
 
g.go('http://login.rutracker.org/forum/login.php', post = {
    'login_username': login,
    'login_password': password,
    'login': ''
})

reclosedev
Код страницы гляньте, список торрентов там все равно есть. И в моем коде (через cssselect) этот список отображается.
Что я и имел в виду.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version