梦见狗是什么意思,消失的夫妻-英国计划大幅增加国际学生数量,英国留学

爬虫大牛用Python写的牛逼程序/脚本,你玩过吗?这些用 Python 写的牛逼程序/脚本,你玩过吗?

机器学习算法与Python学习 今日

编译:Python开发者 - Jake_on 英文:Quora

http://python.jobbole.com/85986/

有网友在 Quora 上发问,「你用 Python 写过最牛逼的程序/脚本是什么?」。本文摘编了 3 个国外程序员的多个小项目,含代码。

Manoj Memana Jayakumar, 3000+ 顶

更新:凭仗这些脚本,我找到了作业!可看我在这个帖子中的回复,《Has anyone got a job through Quora? Or somehow made lots of money through Quora?》

1. 电影/电视剧 字幕一键下载器

咱们常常会遇到这样的情形,便是翻开字幕网站subscene 或许opensubtitles, 查找电影或电视剧的姓名,然后选择正确的抓取器,下载字幕文件,解压,剪切并粘贴到电影地点的文件夹,而且需把字幕文件重命名以匹配电影文件的姓名。是不是觉得太无趣呢?对了,我之前写了一个脚本,用来下载正确的电影或电视剧字幕文件,而且存储到与电影文件地点位置。一切的操作过程仅需一键就能够完结。懵逼了吗?

请看这个 Youtube 视频:https://youtu.be/Q5YWEqgw9X8

源代码存放在GitHub:subtitle-downloader

更新:现在,该脚本支撑多个字幕文件一起下载。过程:按住 Ctrl ,选择你想要为其下载字幕的多个文件 , 终究履行脚本即可

2. IMDb 查询/电子表格生成器

我是一个电影迷,喜爱看电影。我总是会为该看哪一部电影而困惑,由于我搜集了许多的电影。所以,我应该怎样做才干消除这种困惑,选择一部今晚看的电影?没错,便是IMDb。我翻开 http://imdb.com,输入电影的姓名,看排名,阅览和谈论,找出一部值得看的电影。

可是,我有太多电影了。谁会想要在搜男尸吧索框输入一切的电影的姓名呢?我必定不会这样做,尤其是我信任“假如某些东西是重复性的,那么它应该是能够主动化的”。因而,我写了一个 python 脚本, 意图是为了运用 非官方的 IMDb API 来获取数据。我选择一个电影文件(文件夹),点击右键,选择‘发送到’,然后 点击 IMDB.cmd (趁便提一下,IMDB.cmd 这个文件便是我写的 python 脚本),便是这样。

我的浏览器会翻开这部电影在IMDb网站上的准确页面。

只是只需点击一个按键,就能够完结如上操作。假如你不能够了解这个脚本到底有多酷,以及它能够为你节约多少时刻,请看这个 Youtube 视频:https://youtu.be/JANNcimQGyk

从现在开始,你再也不需求翻开你的浏览器,等候加载IMDb的页面,键入电影的姓名。这个脚本会帮你完结一切的操作。跟平常相同,源代码放在了GitHub:imdb ,而且附有操作阐明。当然,由于这个脚本有必要去掉文件或文件夹中的无意义的字符,比方“DVDRip, YIFY, BRrip”等,所以在运转脚本的时分会有必定份额的过错。可是经过测验,这个脚本在我简直一切的电影文件上都运转的很好。

2014-04-01更新:

许多人在问我是否能够写一个脚本,能够发现一个文件夹中一切电影的详细信息,由于每一次只能发现一个电影的详细信息是十分费事的。我现已更新了这个脚本,支撑处理整个文件夹。脚本会剖析这个文件夹里的一切子文件夹,从 IMDb上抓取一切电影的详细信息 ,然后翻开一个电子表格,依据IMDb 上的排名,从高到低降序摆放一切的电影。这个表格中包括了 (一切电影)在 IMDb URL, 年份,情节,分类,获奖信息,艺人信息,以及其他的你或许在 IMBb找到的信息。下面是脚尹国驹本履行后,生成的表格典范:


Your very own personal IMDb database! What more can a movie buff ask for? ;)

Source on GitHub: imdb

你也能够有一个个人 IMDb 数据库!一个电影爱好者还能够要求更多吗?:)

源代码在 GitHub:imdb

3. theoatmeal.com 连载漫画下载器


我个人超级喜爱 Matthew Inman 的漫画。它们在张狂搞笑的一起,却又发人深思。可是,我很厌烦重复点击下一个,然后才干阅览每一个漫画。其他,由于每一个漫画都由多福图片组成,所以手动下载这些漫画是十分困难的。

依据如上原因,我写了一个 python 脚本 ,用来从这个站点下载一切的漫画。这个脚本运用 BeautifulSoup (http://www.crummy.com/software/B… ) 解析 HTML 数据, 所以在运转脚本前,有必要装置 BeautifulSoup。用于下载燕麦片(马修.英曼的一部漫画作品)的下载器现已上传到GitHub:theoatmeal.com-downloader 。(漫画)下载完后的文件夹是这样的 :D



4. someecards.com 下载器

成功地从http://www.theoatmeal.com 下载了整部漫画后,我在想是否我能够做相同的作业 , 从另一个我喜爱的站点— 搞笑的,仅有的http://www.someecards.com . 下载一些东西呢?


somececards 的问题是,图片命名是彻底随机的,一切图片的排放没有特定的次序,而且一共有52 个大的类别, 每一个类别都有数以千计的图片。

我知道,假如我的脚本是多线程的话,那将是十分完美的,由于有许多的数据需求解析和下载,因而我给每一个类别中的每一页都分配一个线程。这个脚本会从网站的每一个独自的分类下载搞笑的电子贺卡,而且把每一个放到独自的文件夹。现在,我具有这个星球上最好笑的电子贺卡私家保藏。下载完结后,我的文件夹是这样的:

没错,我的私家保藏一共包括:52个类别,5036个电子贺卡。源代码在这里:someecards.com-downloader

批改:许多人问我是否能够同享我下载的一切文件,(在这里,我要说)由于我的网络不太安稳,我没办法把我的保藏上传到网络硬盘,可是我现已上传一个种子文件,你们能够在这里下载:somecards.com Site Rip torrent

种下种子,传达爱:)

Akshit Khurana,4400+ 顶

感谢 500 多个朋友在 Facebook 上为我送出的生日祝愿

有三个故事让我的21岁生日变的难忘,这是终究一个故事。我倾向于在每一条祝愿下亲身谈论,可是运用 python 来做更好。

 1…
2广州住宅公积金管理中心
31. # Thanking everyone who wished me on my birthday
4
52. import requests
6
73. import json
8
94.
10
115. # Aman s post time
12
136. AFTER = 1353233754
14
157. TOKEN =
16
178.
18
199. def get_posts():
20
2110. """Returns dictionary of id, first names of people who posted on my wall
22
2311. between start and end time"""
24
2512. query = ("SELECT post_id, actor_id, message FROM stream WHERE "
26
2713. "filter_key = others AND source_id = me() AND "
28
2914. "created_time > 1353233754 LIMIT 200")
30
3115.
32
3316. payload = { q : query, access_token : TOKEN}
34
3517. r = requests.get( https://graph.faceb无可厚非ook.com/fql , params=payload)
36
3718. result = json.loads(r.text)
38
3919. return result[ data ]
40
4120.
42
4321. def commentall(wallposts):
44
4522. """Comments thank you on all posts"""
46
4723. #TODO convert to batch request later
48
4924. for wallpost in wallposts:
50
5125.
52
5326. r = requests.get( https://graph.facebook.com/%s %
54
5527. wallp梦见狗是什么意思,消失的夫妻-英国方案大幅添加世界学生数量,英国留学ost[ actor_id ])
56
5728. u梦见狗是什么意思,消失的夫妻-英国方案大幅添加世界学生数量,英国留学rl = https://graph.facebook.com/%s/comments % wallpost[ post_id ]
58
5929. user = json.loads(r.text)
60
6130. message = Thanks %s :) % user[ first_name ]
62
6331. payload = { access_token : TOKEN, message : message}
64
6532. s = requests.post(url, data=payload)
66
6733.
68
6934. print "Wall post %s done" % wallpost[ post_id ]
70
7135.
72
7336. if __name__ == __main__ :
74
7537. commentall(get_posts())
76
77…


为了能够顺畅运转脚本,你需求从Graph API Explorer(需恰当权限)取得 token。本脚本假定特守时刻戳之后的一切帖子都是生日祝愿。

虽然对谈论功用做了一点改动,我依然喜爱每一个帖子。

当我的点赞数,谈论数以及谈论结构在 ticker(Facebook一项功用,朋友华若言能够看到另一个朋友在做什么,比方点赞,听歌,看电影等) 中爆涨后,我的一个朋友很快发现此事必有奇怪。

虽然这个不是我最满足的脚本,可是它简略,方便,风趣。

当我和 Sandesh Agrawal 在网络实验室谈论时,有了写这个脚本的主意。为此,Sandesh Agrawal 耽误了实验室作业,深表感谢。

Tanmay Kulshrestha,3300+ 顶

好了,在我失掉这个项目之前(一个猪相同的朋友格局化了我的硬盘,我的一切代码都在那个硬盘上)或许说,在我忘掉这些代码之前,我决议来答复这个问题。

收拾相片

当我对图画处理感兴趣之后,我一向致力于研讨机器学习。我写这个风趣的脚本,意图是为了分类虚漂浮图片,很像 Facebook 做的那样(当然这是一个不行准确的算法)。我运用了 OpenCV 的人脸检测算法,“haarcascade_frontalface_default.xml”,它能够从一张相片中检测到人脸。


你或许现已察觉到这张相片的某些当地被过错地辨认为人脸。我企图经过批改一些参数(来批改这一问题),但仍是某些当地被过错地辨认为人脸,这是由相机的相对距离导致的。我会在下一阶段处理这一问题(练习过程)。

这个练习算法需求一些练习材料,每个人需求至少需求100-120梦见狗是什么意思,消失的夫妻-英国方案大幅添加世界学生数量,英国留学个练习材料(当然多多益善)。我太懒了,并没有为每一个人选择相片,并把它们仿制粘帖到练习文件夹。所以,你或许现已猜到,这个脚本会翻开一个图片,辨认人脸,并显现每一个人脸(脚本会依据处于当时节点的练习材料给每一个人脸猜测一个姓名)。伴随着每次你符号的相片,Recognizer 会被更新,而且还会包括上一次的练习材料。在练习过程中,你能够添加新的姓名。我运用 python 库 tkinter 做了一个 GUI。因而,大多数时分,你有必要初始化一小部分相片(给相片中的人脸命名),其他的作业都能够交给练习算法。因而,我练习了 Recognizer ,然后让它(Recognizer)去处理一切的图片。

我运用图片中包括的人的人名来命名图片,梦见狗是什么意思,消失的夫妻-英国方案大幅添加世界学生数量,英国留学(例如:Tanmay&*****&*****)。因而,我能够遍历整个文件夹,然后能够经过输入人名的方法来查找图片。

初始状况下,当一个人脸还没有练习材料时(材料库中还没有包括这个人脸的姓名),需求问询他/她的姓名。


我能够添加一个姓名,像这个姿态:


当练习了几个材料后,它会像这个姿态:




终究一个是针对应对那些废物随机方块而运用的变通处理方案。

带姓名的终究文件夹。


所以,现在寻觅图片变得适当简略。趁便提一下,很抱愧(我)扩大了这些相片。

 1import cv2
2
3import sys
4
5import os,random,string
6
7#choices=[ Add a name ]
8
9import os
10
11current_directory=os.path.dirname(os.path.abspath(__file__))
12
13from Tkinter import Tk
14
15from easygui import *
16
17import numpy as np
18
19x= os.listdir(current_directory)
20
21new_x=[]
22
23testing=[]
24
25for i in x:
26
27if i.find( . )==-1:
28
29new_x+=[i]
30
31else:
32
33testing+=[i]
34
35x=new_x
36
37g=x
38
39choices=[ Add a name ]+x
40
41y= range(1,len(x)+1)
42
43def get_images_and_labels():
44
45global 迅雷看看播映器current_directory,x,y,g
46
47if x==[]:
48
49return (False,False)
50
51image_paths=[]
52
53for i in g:
54
55path=current_directory+ +i
56
57for filename in os.listdir(path):
58
59final_path=path+ +filename
60
61image_paths+=[final_path]
62
63# images will contains face images
64
65images = []
66
67# labels will contains the label that is as梦见狗是什么意思,消失的夫妻-英国方案大幅添加世界学生数量,英国留学signed to the image
68
69labels = []
70
71for image_path in image_paths:
72
73# Read the image and convert to grayscale
74
75img = cv2.imread(image_path,0)
76
77# Convert the image format into numpy array
78
79image = np.array(img, uint8 )
80
81# Get the label of the image
82
83backslash=image_path.rindex( )
84
85underscore=image_path.index( _ ,backslash)
86
87nbr = image_path[backslash+1:underscore]
88
89t=g.index(nbr)
90
91nbr=y[t]
92
93# If face is detected, append the face to images and the label to labels
94
95images.append(image)
96
97labels.append(nbr)
98
99#cv2.imshow("Adding faces to traning set...", image)
100
101#cv2.waitKey(50)
102
103# return the images list and labels list
104
105return images, labels
106
107# Perform the tranining
108
109def train_recognizer():
110
111re多宝余cognizer = cv2.createLBPHFaceRecognizer()
112
113images, labels = get_images_and_labels()
114
115if images==False:
116
117return False
118
119cv2.destroyAllWindows()
120
121recognizer.train(images, np.array(labels))
122
123return recognizer
124
125def get_name(image_path,recognizer):
126
127global x,choices
128
129#if recognizer== :
130
131# recognizer=train_recognizer()
132
133cascadePath = "haarcascade_frontalface_default.xml"
134
135faceCascade = cv2.CascadeClassifier(cascadePath)
136
137#recognizer=train_recognizer()
138
139x1=testing
140
141global g
142
143print image_path
144
145image = cv2.imread(image_path)
146
147img = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
148
149predict_image = np.array(img, uint8 )
150
151faces = faceCascade.detectMultiScale(
152
153img,
154
155scaleFactor=1.3,
156
157minNeighbors=5,
158
159minSize=(30, 30),
160
161flags = http://cv2.cv.CV_HAAR_SCALE_IMAGE
162
163)
164
165for (x, y, w, h) in faces:
166
167f= image[y:y+w,x:x+h]
168
169cv2.imwrite( temp.jpg ,f)
170
171im= temp.jpg
172
173nbr_predicted, conf = recognizer.predict(predict_image[y: y + h, x: x + w])
174
175predicted_name=g[nbr_predicted-1]
176
177print "{} is Correctly Recognized with confidence {}".format(predicted_name, conf)
178
179if conf>=140:
180
181continue
182
183msg= Is this +predicted梦见狗是什么意思,消失的夫妻-英国方案大幅添加世界学生数量,英国留学_name
184
185reply = buttonbox(msg, image=im, choices=[ Yes , No ])
186
187if reply== Yes :
188
189reply=predicted_name
190
191directory=current_directory+ +reply
192
193if not os.path.exists(directory):
194
195os.makedirs(directory)
196绿农网
197random_name= .join(random.choice(string.ascii_uppercase + string.digits) for _ in range(7))
198
199path=directory+ +random_name+ .jpg
200
201cv2.imwrite(path,f)
202
203else:
204
205msg = "Who is this?"
206
207reply = buttonbox(ms男的相片g, image=im, choices=choices)
208
209if reply == Add a name :
210
211n鸸鹋ame=enterbox(msg= Enter the name , title= Training , strip=True)
212
213print name
214
215choices+=[name]
216
217reply=name
218
219directory=current_directory+ +reply
220
221if not os.path.exists(directory):
222
223os.makedirs(directory)
224
225random_name= .join(random.choice(string.ascii_uppercase + string.digits) for _ in range(7))
226
227path=directory+ +random_name+ .jpg
228
229print path
230
231cv2.imwrite(path,f)
232
233
234
235# calculate window position
236
237root = Tk()
238
239pos = int(root.winfo_screenwidth() * 0.5), int(root.winfo_screenheight() * 0.2)
240
241root.wit鸡姐hdraw()
242
243WindowPosition = "+%d+%d" % pos
244
245
246
247# patch rootWindowPosition
248
249rootWindowPosition = WindowPosition
250
251def detect_faces(img):
252
253global choices,current_directory
254
255imagePath = img
256
257faceCascade = cv2.CascadeClassifier(cascPath)
258
259image = cv2.imread(imagePath)
260
261gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
262
263faces = faceCascade.detectMultiScale(
264
265gray,
266
267scaleFactor=1.3,
268
269minNeighbors=5,
270
271minSize=(30, 30),
272
273flags = http://cv2.cv.CV_HAAR_SCALE_IMAGE
274
275)
276
277
278
279print "Found {0} faces!".format(len(faces))
280
281m=0
282
283for (x, y, w, h) in faces:
284
285m+=1
286
287padding=0
288
289f= image[y-padding:y+w+padding,x-padding:x+h+padding]
290
291cv2.imwrite( temp.jpg ,f)
292
293im= temp.jpg
294
295msg = "Who is this?"
296
297reply = buttonbox(msg, image=im, choices=choices)
298
299if reply == Add a name :
300
301name=enterbox(msg= Enter the name , title= Training , strip=True)
302
303print name
304
305choices+=[name]
306
307reply=name
308
309directory=current_directory+ +reply
310
311if not os.path.exists(directory):
312
313os.makedirs(directory)
314
315random_name= .join(random.choice(string.ascii_uppercase + string.digits) for _ in range(7))
316
317path=directory+ +random_name+ .jpg
318
319print path
320
321cv2.imwrite(path,f)
322
323def new(img,recognizer):
324
325imagePath = current_directory+ +img
326
327print imagePath
328
329get_name(imagePath,recognizer)
330
331cascPath = haarcascade_frontalface_default.xml
332
333b=0
334
335os.system("change_name.py")
336
337for filename in os.listdir("."):
338
339b+=1
340
341if b%10==0 or b==1:
342
343os.system("change_name.py")
344
345recognizer=train_recognizer()
346
347if filename.endswith( .jpg ) or filename.endswith( .png ):
348
349print filename
350
351imagePath=filename
352
353#detect_faces(imagePath)
354
355new(imagePath,recognizer)
356
357os.remove(filename)
358
359raw_input( Done with this photograph )


我想进一步批改它的查找功用,其中会包括更多的查找类型,比方依据地理位置,浅笑的脸,悲伤的脸等等。(这样我就能够在 Skylawns 上 查找高兴的 Tanmay & 懊丧的 Akshay & 高兴的…)

我还写了许多脚本,但那都是好久之前的作业了,我也懒得再去查看这些代码了,我会列出部分代码。

GitHub 链接:tanmay2893/Image-Sorting

Gmail 邮件告知

在那段时刻,我没有智能手机。导致我常常错失来自于我地点的研讨所的邮件(在我的研讨所的邮件 ID),我写了一个脚本,能够在我的笔记本上运转,而且能给我的手机发信息。我运用 python 的 IMAP 库来获取邮件。我能够输入一些重要的人的姓名,这样一来,当这些人给我发了邮件后,我能够收到短信告知。关于短信, 我运用了 way2sms.com(写了一个 python 脚本,主动登陆我的账户,然后发送 短信)。

PNR(Passenger Name Record旅客订座记载,下同) 状况短讯

铁路方面不常常发送 PNR 状况音讯。因而,我写了一个脚本,能够从印度铁路网站获取 PNR 状况。这是十分简略的,由于那个网站没有验证码,即便有,也只是形同虚设的验证码(在曩昔,一些字母会被写在看起来像图片相同的东西上面,由于他们为这些字母运用了一个 “check” 的背景图)。咱们能够轻松地从 HTML 网页得到这些字母。我不明白他们这样做的意图是什么,莫非只是是为了捉弄他们自己吗?不论怎样样,我运用短信息脚原本处理它,经过一段时刻距离,它会在我的笔记本上运转一次,就像是一个守时使命,只需 PNR 状况有更新,它就会bf把更新信息发送给我。

YouTube 视频下载器

这个脚本会从 Youtube 页面下载一切的 Youtube 视频 以及他们一切的字幕文件(从Download and save subtitles 下载)。为了使下载速度更快一点,我运用了多线程。还有一个功用是,即便你的电脑重启了,依然能够暂停和康复播映下载的(视频)。我原本想做一个UI的,可是我太懒了… 一旦我的下载使命完结,我就不去关怀 UI 的作业了。

板球比分告知器

我猜测这个功用现已在其他当地说到过了。一个窗口告知器。(在右下角的告知区域,它会告知你实时比分以及谈论信息)。假如你乐意的化,在某些时刻段,你也能够关掉它。

WhatsApp 音讯

这个并不太有用,我只是写着玩玩。由于 Whatsapp 有网页版,我运用 selenium 和 Python 下载我的一切联络人的显现图片,而且,一旦有人更新了他们的显现图片,我将会知道。(怎样做到的?十分简略,在设定好时刻距离后,我会一遍又一遍的不断下载一切的头像信息,一旦相片的尺度发生变化,我将会知道他/她更新了显现图片)。然后我会给他/她发一个信息,不错的头像。我只是运用了一次来测验它的可用性。

Nalanda 下载器

咱们一般在这个叫 ‘Nalanda’ 的网站上下载一些教育课件以及其他的课程材料, ‘Nalanda’ 在 BITS Pilani (Nalanda). 我自己懒得在考试前一天下载一切的课件,所以,我写了这个这个下载器,它能够把每一门科的课件下载到相应的文件夹。




代码:

 1import mechanize,os,urllib2,urllib,requests,getpass,time
2
3start_time = time.time()
4
5from bs4 import BeautifulSoup
6
7br=mechanize.Browser()
8
9br.梦见狗是什么意思,消失的夫妻-英国方案大幅添加世界学生数量,英国留学open( https://nalanda.bits-pilani.ac.in/login/index.php )
10
11br.select_form(nr=0)
12
13
14
15name=
16
17while name== :
18
19 try:
20
21 print *******
22
23 username=raw_input( Enter Your Nalanda Username: )
24
25 password=getpass.getpass( Password: )
26
27 br.form[ username ]=username
28
29 br.form[ 99000韩元password ]=password
30
31 res=br.submit()
32
33 response=res.read()
34
35 soup=BeautifulSoup(response)
36
37 name=str(soup.find( div ,attrs={ class : logininfo }).a.string)[:-2]
38
39 except:
40
41 print Wrong Password
42
43f=open( details.txt , viaw )
44
45f.write(username+ n +password)
46
47f.close()
48
49print Welcome, +name
50
51print All the files will be downloaded in your Drive C in a folder named "nalanda"
52
53#print soup.prettify()
54
55div=soup.find_all( div ,attrs恐惧直播={ class : box coursebox })
56
57
58l=len(div)
59
60a=[]
61
62for i in range(l):
63
64 d=div[i]
65
66 s=str(d.div.h2.a.string)
67
68 s=s[:s.find( ( )]
69
70 c=(s,str(d.div.h2.a[ href ]))
71
72 path= c:nalanda +c[0]
73
74 if not os.path.exists(path):
75
76 os.makedirs(path)
77
78 a+=[c]
79
80#print a
81
82overall=[]
83
84for i in range(l):
85
86 response=br.open(a[i][1])
87
88 page=response.read()
89
90 soup=BeautifulSoup(page)
91
92 li=soup.find_all( li ,attrs={ class : section main clearfix })
93
94 x=len(li)
95
96 t=[]
97
98 folder=a[i][0]
99
100 print Downloading +folder+ files...
101
102 o=[]
103
104 for j in range(x):
105
106 g=li[j].ul
107
108 #print g
109
110 #raw_input( )
111
112 if g!=None:
113
114 temp=http://g.li[ class ].split( )
115
116 #raw_input( )
117
118 if temp[1]== resource :
119
120 #print yes
121
122 #print ********************
123
124 o+=[j]
125
126 h=li[j].find( div ,attrs={ class : content })
127
128 s=str(h.h3.string)
129
130 path= c:nalanda +folder
131
132 if path[-1]== :
133
134 path=path[:-1]
135
136 path+= +s
137
138 if not os.path.exists(path):
139
140 os.makedirs(path)
141
142 f=g.find_all( li )
143
1不念情义寡欢44 r=len(f)
145
146 z=[]
147
148 for e in range(r):
149
150银行利息怎样算 p=f[e].div.div.a
151
152 q=f[e].find( span ,attrs={ class : resourcelinkdetails }).contents
153
154 link=str(p[ href ])
155
156 text=str(p.find( span ).contents[0])
157
158 typ=
159
160 if str(q[0]).find( word )!=-1:
161
162 typ= .docx
163
164 elif str(q[0]).find( JPEG )!=-1:
165
166 typ= .jpg
167
168 else:
169
170 typ= .pdf
171
172 if typ!= .docx :
173
174 res=br.open(link)
175
176 soup=BeautifulSoup(res.read())
177
178 if typ== .jpg :
179
180 di=soup.find( div ,attrs={ class : resourcecontent resourceimg })
181
182 link=di.img[ src ]
183
184 else:
185
186 di=soup.find( div ,attrs={ class : resourcecontent resourcepdf })
187
188 link=di.object[ data ]
189
190 try:
191
192 if not os.path.exists(path+ +text+typ):
193
194 br.retrieve(link,path+ +text+typ)[0]
195
196 except:
197
198 print Connectivity Issues
199
200 z+=[(link,text,typ)]
201
202 t+=[(s,z)]
203
204 if t==[]:
205
206 print No Documents in this subject
207
208 overall+=[o]
209
210 #raw_input( Press any button to resume )
211
212#print overall
213
214print Time Taken to Download: +str(time.time()-start_time)+ s霰粒肿econds
215
216print Do you think you can download all files faster than this :P
217
218print Closing in 10 seconds
219
220time.sleep(10)


我自己的 DC++

这个脚本并不是很有用,现在只要一些学生在用它, 何况,DC ++ 现已供给了一些很帅的功用。我原本能够优化我自己的版别,可是,由于咱们现已有了DC ++,我并没有这么做,虽然我现已运用 nodeJS 和 python 写了一个根底版别。

作业原理:

翻开 DC++ , 进入一个中心站点,然后衔接,我写了一个 python 脚原本做这件事。脚本会在 PC上创立一个服务器(能够经过批改 SimpleHTTPRequestHandler 来完结)。

在服务器端(运用了NodeJS),它会拿到 PC 的衔接,同享给其他的用户。




这个是主页面:


这个页面显现了一切的用户和他们的链接。由于我给 Nick 加了一个超链接,所以在链接这一拦是空的。

所以,当用户数量添加今后,这个页面会列出一切的用户列表。基本上,这个页面充当了一个你和其他一个人联络的中间人人物。我还做了一个在一切用户中查找特定文件的功用。

这里是客户端的 python 文件(这是一段很长的代码,我上传到了 Ideone)


 关键词: