usr bin python coding utf-8 import urllib import urllib2 import time i

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#!/usr/bin/python
# -*- coding: utf-8 -*-
import urllib
import urllib2
import time
import cookielib
import re
'''
Описание классов работы с разными трекерами:
__init__(login,password)
login()
search(query)
search_results()
save_torrent()
'''
class TorrentRu:
data = {
"login":"****",
"password":"****"
}
request = 0
logined = False
cookies = []
opener = 0
cookieJar = 0
_search_results = ""
login_counter = 0
def __init__(self,login=None,password=None):
self.cookieJar = cookielib.CookieJar()
self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cookieJar))
def login(self):
#TODO: Обернуть в обработку urltimeout
self.login_counter+=1
dataToSend = {
"login_username":self.data["login"],
"login_password":self.data["password"],
"login":"Послать",
"autologin":"1"
}
dataToSend = urllib.urlencode(dataToSend)
self.request = urllib2.Request("http://torrents.ru/forum/login.php",dataToSend)
up = self.opener.open(self.request,dataToSend)
loginURL = up.geturl()
isLogin = (loginURL.find("login.php")!=-1)
if(isLogin):
time.sleep(3)
self.login()
else:
self.cookies = self.cookieJar.make_cookies(up,self.request)
print self.login_counter, " auths "
self.logined = True
def search(self,query):
dataToSend = urllib.urlencode({'max':'1','to':'1','nm':query})
self.request = urllib2.Request("http://torrents.ru/forum/tracker.php#results",dataToSend)
up = self.opener.open(self.request,dataToSend)
self._search_results = up.read();
#TODO: Добавить обработку остальных страниц.
# Что-то типа
# if(res.find("<p style="float: right"><a class="menu-root" href="#pg-jump">￑￲￰¢■│￶</a> :&nbsp;&nbsp;<b>1</b>, <a href="tracker.php?search_id=wJ2MdccFCePj&amp;start=50">2</a>, <a href="tracker.php?search_id=wJ2MdccFCePj&amp;start=100">3</a>, <a href="tracker.php?search_id=wJ2MdccFCePj&amp;start=150">4</a>, <a href="tracker.php?search_id=wJ2MdccFCePj&amp;start=200">5</a>, <a href="tracker.php?search_id=wJ2MdccFCePj&amp;start=250">6</a>, <a href="tracker.php?search_id=wJ2MdccFCePj&amp;start=300">7</a>, <a href="tracker.php?search_id=wJ2MdccFCePj&amp;start=350">8</a>, <a href="tracker.php?search_id=wJ2MdccFCePj&amp;start=400">9</a>, <a href="tracker.php?search_id=wJ2MdccFCePj&amp;start=450">10</a>&nbsp;&nbsp;<a href="tracker.php?search_id=wJ2MdccFCePj&amp;start=50">￑→¥¦.</a></p>"))
# только через re
# В этой версии поиск только по первой странице
def search_results(self,files=False):
result = {}
''' Парсинг результатов поиска '''
res = self._search_results
res = res[res.find("<table class=\"forumline\">"):]
res = res[:res.find("<div class=\"bottom_info\">")]
r = re.compile("<td class=\"row1 tCenter\" title=\"(.*)\"><span class=\"tor-icon")
matches = r.search(res)
s = matches.group(1)
print s
#print s.encode('cp1251')
print unicode(s,"cp1251")
print isinstance(s, str)
print type(s)
# print r.match(res)
#<td class="row1 tCenter" title="([^<>"]+)">.*href="(tracker.php\?f=\d+)">([^<>]+)<\/a>.*href="\.\/(viewtopic.php\?t=\d+)">
# Теперь в res - сама таблица.
#TODO: Рассмотреть возможность парсинга DOM
#TODO: Заготовить регекспы для обработки самой таблицы.
return result