轉知乎的文章 都用 Python 來做什么啊


大家都用 Python 來做什么啊? Tsing:誰說我是來看段子的。。。 首先上一首Python之禪:

 
Python是一個非常好用的程序語言,開發的速度非常快。我用Python已經一年多了,從Python2.7到現在的Python3.4,也寫了好多的小程序,其中大部分都是爬蟲程序,下面簡單列舉幾個,可憐了我科的各種系統。

 

0. 制作引文分析利器HistCite的便捷使用版本

 
怎么又出現了一個序號為零的啊!沒錯,這個又是我后來加上的,嘻嘻~

對於整天和文獻打交道的研究生來說,HistCite是一款不可多得的效率利器,它可以快速繪制出某個研究領域的發展脈絡,快速鎖定某個研究方向的重要文獻和學術大牛,還可以找到某些具有開創性成果的無指定關鍵詞的論文。但是原生的HistCite已經有4年沒有更新了,現在使用會出現各種bug,於是我就用Python基於HistCite內核開發了一個方便使用的免安裝版本。具體的使用方法和下載鏈接見我的第一篇知乎專欄文章:文獻引文分析利器HistCite使用教程(附精簡易用免安裝Pro版本下載) - Tsing的文章 - 知乎專欄

 

 
 

1. 破解觀看中科大網絡課堂

 

中國科學技術大學網絡課堂(

)是一個非常好的平台,上面匯集了很多知名教授的授課視頻,以及最新的講座、報告、表演視頻,內容還是相當豐富的。但是這些視頻只面向校內IP開放。

所以想在校外看到這些視頻必須破解視頻地址,於是利用Python的requests庫結合BeautifulSoup,用了不到10行代碼就可以獲取真實下載地址。

為了方便沒有安裝Python的電腦使用,簡單寫了一個GUI界面,給室友用,都說還是挺好的用的哈。

考慮到視頻版權問題,代碼和程序就不放出來了,請大家見諒。
 

2. 獲取中科大研究生系統全部學生姓名、學號、選課信息

 

登錄中國科學技術大學的研究生綜合系統(中國科學技術大學研究生信息平台

),可以看到每一門課選課的學生姓名和學號,當時就想能不能做一個這樣的系統,來輸入任何姓名(或者學號)就可以看到他所有的選課信息呢?這是選課首頁:

點擊每門課的已選人數鏈接,可以看到所有的選課學生姓名和學號:

下面就利用requests的模擬登錄功能,先獲取全部課程的鏈接,並保存對於的課程信息,然后挨個獲取了所有課程的選課信息。為了保護學生信息,對程序的關鍵部分進行了模糊處理,希望大家諒解。

 
這樣就獲取了一個巨大的json文件,里面全部是學生姓名學號選課信息:

有了這個json文件,我們可以寫入數據庫,也可以直接利用json文件來查詢:

為了方便其他人使用,基於上面的數據我開發了一個線上版本:

輸入姓名或者學號都可以直接查詢別人的選課信息:

 
這個地址就不放出來了,如果您是科大的研究生,私信我,我把鏈接發給你。
 

3. 掃描中科大研究生系統上的弱密碼用戶

 
基於上面獲得的選課學生學號,很容易利用Python依次模擬登錄研究生,密碼就用弱密碼123456,然后可以獲得身份證號碼等重要信息。

這樣就得到了使用123456作為密碼的用戶信息,所以在此提醒大家一定不要使用弱密碼,希望下面的同學早日修改密碼。

 

4. 模擬登錄中科大圖書館並自動續借

 
最近,科大圖書館系統升級了,到處都加了驗證碼,所以下面這個方法直接使用肯定是不行了,不過曾經畢竟成功過哈。以前收到借閱圖書到期通知短信,就會運行一下這個程序,自動續借了,然后就可以再看一個月了。

運行就是這樣的,自動續借成功,看到的鏈接就是每本書的續借鏈接。

 

5. 網易雲音樂批量下載

 
終於來一個正常一點的哈,那么我就直接放代碼吧,可以下載網易雲音樂各個榜單的全部歌曲,批量下載,速度挺快。請注意提前要創建一個名為 “網易雲音樂” 的文件夾。
# 網易雲音樂批量下載# By Tsing# Python3.4.4importrequestsimporturllib# 榜單歌曲批量下載# r = requests.get('http://music.163.com/api/playlist/detail?id=2884035') # 網易原創歌曲榜# r = requests.get('http://music.163.com/api/playlist/detail?id=19723756') # 雲音樂飆升榜# r = requests.get('http://music.163.com/api/playlist/detail?id=3778678') # 雲音樂熱歌榜r=requests.get('http://music.163.com/api/playlist/detail?id=3779629')# 雲音樂新歌榜# 歌單歌曲批量下載# r = requests.get('http://music.163.com/api/playlist/detail?id=123415635') # 雲音樂歌單——【華語】中國風的韻律,中國人的印記# r = requests.get('http://music.163.com/api/playlist/detail?id=122732380') # 雲音樂歌單——那不是愛,只是寂寞說的謊arr=r.json()['result']['tracks']# 共有100首歌foriinrange(10):# 輸入要下載音樂的數量,1到100。name=str(i+1)+' '+arr[i]['name']+'.mp3'link=arr[i]['mp3Url']urllib.request.urlretrieve(link,'網易雲音樂\\'+name)# 提前要創建文件夾print(name+' 下載完成')
於是就可以愉快的聽歌了。

 
上面這些都是在Python3的環境下完成的,在此之前,用Python2還寫了一些程序,下面也放幾個吧。初期代碼可能顯得有些幼稚,請大神見諒。
 

6. 批量下載讀者雜志某一期的全部文章

 
上次無意中發現讀者雜志還有一個在線的版本,然后興趣一來就用Python批量下載了上面的大量文章,保存為txt格式。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 保存讀者雜志某一期的全部文章為TXT
# By Tsing
# Python 2.7.9

import urllib2
import os
from bs4 import BeautifulSoup

def urlBS(url):
    response = urllib2.urlopen(url)
    html = response.read()
    soup = BeautifulSoup(html)
    return soup

def main(url):
    soup = urlBS(url)
    link = soup.select('.booklist a')
    path = os.getcwd()+u'/讀者文章保存/'
    if not os.path.isdir(path):
        os.mkdir(path)
    for item in link:
        newurl = baseurl + item['href']
        result = urlBS(newurl)
        title = result.find("h1").string
        writer = result.find(id="pub_date").string.strip()
        filename = path + title + '.txt'
        print filename.encode("gbk")
        new=open(filename,"w")
        new.write("<<" + title.encode("gbk") + ">>\n\n")
        new.write(writer.encode("gbk")+"\n\n")
        text = result.select('.blkContainerSblkCon p')
        for p in text:
            context = p.text
            new.write(context.encode("gbk"))

        new.close()


if __name__ == '__main__':
    time = '2015_03'
    baseurl = 'http://www.52duzhe.com/' + time +'/'
    firsturl = baseurl + 'index.html'
    main(firsturl)
    
 

7. 獲取城市PM2.5濃度和排名

 
最近環境問題很受關注,就用Python寫了一個抓取PM2.5的程序玩玩,程序支持多線程,方便擴展。
#!/usr/bin/env python# -*- coding: utf-8 -*-# 獲取城市PM2.5濃度和排名# By Tsing# Python 2.7.9importurllib2importthreadingfromtimeimportctimefrombs4importBeautifulSoupdefgetPM25(cityname):site='http://www.pm25.com/'+cityname+'.html'html=urllib2.urlopen(site)soup=BeautifulSoup(html)city=soup.find(class_='bi_loaction_city')# 城市名稱aqi=soup.find("a",{"class","bi_aqiarea_num"})# AQI指數quality=soup.select(".bi_aqiarea_right span")# 空氣質量等級result=soup.find("div",class_='bi_aqiarea_bottom')# 空氣質量描述printcity.text+u'AQI指數:'+aqi.text+u'\n空氣質量:'+quality[0].text+result.textprint'*'*20+ctime()+'*'*20defone_thread():# 單線程print'One_thread Start: '+ctime()+'\n'getPM25('hefei')getPM25('shanghai')deftwo_thread():# 多線程print'Two_thread Start: '+ctime()+'\n'threads=[]t1=threading.Thread(target=getPM25,args=('hefei',))threads.append(t1)t2=threading.Thread(target=getPM25,args=('shanghai',))threads.append(t2)fortinthreads:# t.setDaemon(True)t.start()if__name__=='__main__':one_thread()print'\n'*2two_thread()
 

8. 爬取易迅網商品價格信息

 
當時准備抓取淘寶價格的,發現有點難,后來就沒有嘗試,就把目標選在了易迅網。
#!/usr/bin/env python
#coding:utf-8
# 根據易迅網的商品ID,爬取商品價格信息。
# By Tsing
# Python 2.7.9

import urllib2
from bs4 import BeautifulSoup
def get_yixun(id):
    price_origin,price_sale = '0','0'
    url = 'http://item.yixun.com/item-' + id + '.html'
    html = urllib2.urlopen(url).read().decode('utf-8')
    soup = BeautifulSoup(html)
    title = unicode(soup.title.text.strip().strip(u'【價格_報價_圖片_行情】-易迅網').replace(u'】','')).encode('utf-8').decode('utf-8')
    print title
    try:
        soup_origin = soup.find("dl", { "class" : "xbase_item xprice xprice_origin" })
        price_origin = soup_origin.find("span", { "class" : "mod_price xprice_val" }).contents[1].text 
        print  u'原價:' + price_origin
    except:
        pass
    try:
        soup_sale= soup.find('dl',{'class':'xbase_item xprice'})
        price_sale = soup_sale.find("span", { "class" : "mod_price xprice_val" }).contents[1] 
        print  u'現價:'+ price_sale
    except:
        pass
    
    print url
    return None

if __name__ == '__main__':
    get_yixun('2189654')
 

9. 音悅台MV免積分下載

 
音悅台上有好多高質量的MV,想要下載卻沒有積分,於是就想到破解下載。當時受一個大神的代碼的啟發,就寫出了下面的代碼,雖然寫的有點亂,但還是可以成功破解的哈。
#!/usr/bin/env python# -*- coding: utf-8 -*-# 音悅台MV免積分下載# By Tsing# Python 2.7.9importurllib2importurllibimportremv_id='2278607'# 這里輸入mv的id,即http://v.yinyuetai.com/video/2275893最后的數字url="http://www.yinyuetai.com/insite/get-video-info?flex=true&videoId="+mv_idtimeout=30headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36','Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'}req=urllib2.Request(url,None,headers)res=urllib2.urlopen(req,None,timeout)html=res.read()reg=r"http://\w*?\.yinyuetai\.com/uploads/videos/common/.*?(?=&br)"pattern=re.compile(reg)findList=re.findall(pattern,html)# 找到mv所有版本的下載鏈接iflen(findList)>=3:mvurl=findList[2]# 含有流暢、高清、超清三個版本時下載超清else:mvurl=findList[0]# 版本少時下載流暢視頻local='MV.flv'try:print'downloading...please wait...'urllib.urlretrieve(mvurl,local)print"[:)] Great! The mv has been downloaded.\n"except:print"[:(] Sorry! The action is failed.\n"
 

10. 其他請參考:能利用爬蟲技術做到哪些很酷很有趣很有用的事情? - Tsing 的回答

 
 

結語:Python是一個利器,而我用到的肯定也只是皮毛,寫過的程序多多少少也有點相似,但是我對Python的愛卻是越來越濃的。

 
 
 

補充:看到評論中有好多知友問哪里可以快速而全面地學習Python編程,我只給大家推薦一個博客,大家認真看就夠了:Python教程 - 廖雪峰的官方網站


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM