翻译自Quora问答
原题What are the best Python scripts you‘ve ever written
译者:niithub
- 抓取大学同学的简历
那是我在班加罗尔的最后一年,为了获得每一位同学的手机号和家庭地址,我写了我人生中的第一个脚本,它可以从学校就业网站上下载我所有同学的简历。虽然这网站有一个认证,阻止那些未经授权的请求访问网站,但是他们使用的session-id是一个hash表,不够智能,所以基于注册用户的号码的哈希表的序列,动态的生成cookie头信息,然后发起一个HTTP GET请求,并不是很困难。从这以后,python成为了我生活中的一部分,滑稽脸.jpg。
- 回复生日的祝福
这是我之所以爱上Python,尽皆源于此。那年是2012年,我的第22个生日。我当时是在我的老家,印度的一个小村庄,一个一天通电时间不会长于8个小时的地方。因为第二天是我的生日,所以当我打开FaceBook的时候,全部是生日的祝福。我只有一个小时去回复所有的祝福,因为还有一个小时就停电了。。。。我的好朋友Python再一次帮我做到了。我写了一个类似于下面这样的脚本去回复感谢的话语。
- 一天游遍印度
那是2013年,我生日的前一个星期,我和去年一样,用python脚本回复生日祝福。那年我在一家卖汽车票的公司上班,我掌握着全印度的汽车票订购信息。我想也许我可以在印度地图上把这些信息映射出来。我遇到的第一个问题是我不知道这些城市的经纬度。接着我了解到,谷歌提供了一个反向地理编码的API,可以根据地图上城市的名字,返回经纬度,但是有一个限制,那就是一天只能请求2500次。所以我不得不在4次运行脚本的过程中,收集到大概8000个城市的地图。我把一些城市汽车票预定信息生成了SVG图像,然后利用Indiemapper网站,通过html和JavScrip把信息嵌入到我生成的在线印度地图上。这是经过渲染的7月5号的汽车票预定信息
- 查询高考成绩
这是一星期前,我为了一个特殊的人写的脚本。我想帮她拿到她的高考成绩,但是我既不知她的准考号,也不想去问她,是不是有点傻,但是有什么办法呢。我去了大学的网站,然后去找准考号的样式。我不得不去填一份申请,以此来生成我的准考号。现在我知道准考号类似"C-700"。现在我需要知道准考号和后台数据库表的细节的可能范围。我尝试了一些SQL注入,并获得了一些信息,这是一个SQL Server服务器,数据库字段名是roll_no,并且返回了结果集。不幸的是,返回的不是学生姓名的结果集,所以不能在里面找到她的名字:(不管怎样,我写了一个Python脚本,利用HTTPpost请求,下载了准考号从C-109到C-708的所有结果)
以下是一个python爱好者的分享:
1 #@author: Heera([email protected]) 2 #note: it assumes all posts on ur date of birth are wishes 3 #steps to use: 4 #1. Before running it, u need to take a valid access_token and set date of birth 5 #2. goto Facebook 6 #3. click on "Get Acccess token" 7 #4. mark ‘read_stream‘, ‘publish_stream‘ permissions and click on get access token 8 #5. now copy the access token and put in the variable named ‘acces_token‘ 9 #6. put ur date of birth in varible dob in format ‘YYYY-MM-DD‘ 10 #7. now run the script 11 #8. happy b‘day and enjoy :) 12 import httplib, urllib 13 from bs4 import BeautifulSoup 14 import os 15 import json 16 import time 17 import calendar 18 19 #put access_token here 20 access_token=‘ABACEdEose0cBABnHFHoDhGozFNQ76ntIWwUESZCtnrfg7lIFmMr5qPbH82EHozYXNgX6ZBrFbZB65Na lOVHldbeNlsswuCVGjWdn8oVZBCs9ZCXDb5ppioUfsreiHRZCC16XOYAEZCTPC8tI1blkbuyvU6uZC0DxgvJvLEFr5b108V4PZAH0eab yfDWtxg339nMjSan87X2OIahR1A0AXRmZA06rod0ubdr2JvvodaDDvULgZDZF‘ 21 #date of birth here, example: ‘2013-04-24‘ 22 dob=‘2013-04-24‘ 23 conn = httplib.HTTPSConnection("Page on Facebook") 24 print ‘requesting...‘ 25 #conn.request("GET",path,urllib.urlencode(data),{}) 26 has_more=False 27 defconvert_to_local(s): 28 t=time.strptime(s[:19],"%Y-%m-%dT%H:%M:%S") 29 t=time.localtime(calendar.timegm(t)) 30 t=time.strftime("%Y-%m-%d",t) 31 return t 32 33 defgetRandomThnx(msg): 34 #TODO :P 35 return ‘thanks :)‘ 36 defprocess_posts(url): 37 conn = httplib.HTTPSConnection("Page on Facebook") 38 conn.request("GET",url) 39 res = conn.getresponse() 40 conn.getresponse 41 data=res.read() 42 res_obj=json.loads(data) 43 posts=res_obj["data"] 44 processed=0 45 for post in posts: 46 if not "message" in post: 47 continue 48 msg=post["message"] 49 post_date=convert_to_local(post["created_time"]) 50 if dob == post_date: 51 if "from" in post and "message" in post: 52 user= post["from"]["name"] 53 54 55 path=‘/‘+post[‘id‘]+‘/comments‘ 56 param_data={ ‘format‘:‘json‘, 57 ‘message‘:getRandomThnx(msg), 58 ‘access_token‘:access_token 59 } 60 conn = httplib.HTTPSConnection("Page on Facebook") 61 if post["comments"]["count"]==0: 62 print ‘responding to :‘+user+‘->‘+msg 63 conn.request("POST",path,urllib.urlencode(param_data),{}) 64 res = conn.getresponse() 65 path=‘/‘+post[‘id‘]+‘/likes‘ 66 param_data={ ‘format‘:‘json‘, 67 ‘access_token‘:access_token 68 } 69 70 conn = httplib.HTTPSConnection("Page on Facebook") 71 processed+=1 72 73 if "paging" in res_obj: 74 return processed+process_posts(res_obj["paging"]["next"][len("Page on page on Facebook"):]) 75 else: 76 print "Finished" 77 return processed 78 url=‘/me/feed?access_token=‘+access_token 79 print ‘total=‘+str(process_posts(url)) 80 print ‘Thanx to all wisher :)‘
---------------------------------------------------------------End-------------------------------------------------------------------------------
看完本文有收获?请转发分享给更多的人
皆有居 ∣不定期更新
关注「皆有居」,get新技能