Найти - Пользователи
Полная версия: urllib2, javascript
Начало » Web » urllib2, javascript
1
n2b
Привет!

Пишу скриптик и есть необходимость фетчить код страницы с поисковой выдачи рутрекера.
Поисковая выдача выходит при помощи 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 код.
odnochlen
Ставишь себе сниффер или HttpFox и смотришь, в каком файле приходят результаты поиска.

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

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

Это я уже сделал. Результаты поиска приходят ко мне в том же файле что я и фетчу, только они на javascript, а этот код urllib2 не хочет фетчить…
reclosedev
Не знаю где там 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()
n2b
Перевел на граб:

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
n2b
reclosedev, js в поисковой выдаче! Выполните поиск по раздачам по ссылке из моего кода и получите код странице с выдачей. Вот там и есть javascript
reclosedev
Ну значит JS в браузере отключен. Код страницы гляньте, список торрентов там все равно есть. И в моем коде (через cssselect) этот список отображается.
odnochlen
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) этот список отображается.
Что я и имел в виду.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB