-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathzhuixinfan.py
More file actions
59 lines (53 loc) · 1.86 KB
/
zhuixinfan.py
File metadata and controls
59 lines (53 loc) · 1.86 KB
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
'''
collectors
'''
import re
from urllib.parse import quote
import operator
import functools
import requests
from collections import defaultdict
from bs4 import BeautifulSoup
RESOLUTION_RE = re.compile(r'\d{3,}X\d{3,}', re.I)
NO_RE = re.compile(r'\d{2,}')
ZHUIXINFAN_HOST = 'http://zhuixinfan.com/'
def zhuixinfan_collect(url):
'''
zhuixinfan collect
'''
r = requests.get(url)
if not r.ok:
return False
bs = BeautifulSoup(r.content, 'html.parser')
episodes = []
for episode_tr in bs.select('.top-list-data tr')[1:]: # 排除列头
tds = episode_tr.select('td')
episode = {
'title': tds[1].select('a')[0].contents[0],
'url': ZHUIXINFAN_HOST + tds[1].select('a')[0].attrs['href'],
'size': tds[2].contents[0],
}
episode['resolution'] = RESOLUTION_RE.findall(episode['title'])[0]
episode['NO'] = NO_RE.findall(episode['title'])[0]
episodes.append(episode)
return episodes
def get_magnets(episodes):
'''
get magnet
'''
for episode in episodes:
r = requests.get(episode['url'])
episode['magnet'] = ''
if r.ok:
bs = BeautifulSoup(r.content, 'html.parser')
episode['magnet'] = bs.select('#torrent_url')[0].contents[0]
return episodes
if __name__ == '__main__':
target_url = 'http://zhuixinfan.com/main.php?mod=viewresource&sid=8236'
episodes_group_by_resolution = defaultdict(list)
for episode in zhuixinfan_collect(target_url):
resolution = functools.reduce(operator.mul, map(int, episode['resolution'].lower().split('x')))
episodes_group_by_resolution[resolution].append(episode)
episodes = sorted(episodes_group_by_resolution[max(episodes_group_by_resolution.keys())], key=lambda x:x['NO'])
episodes = get_magnets(episodes)
[print(_['magnet']) for _ in episodes]