python下載CVPR2017全套paper
實驗環境:python 2.7
很簡單的爬蟲,沒太多技術含量,就直接貼代碼了。一共783篇paper已經打包上傳,鏈接:http://pan.baidu.com/s/1o88xV4m 密碼:xasd。
這裡的代碼下載的時候是不包含supplement的,文件名為了便於查看,直接就是paper的標題。由於paper的標題可能會出現冒號等特殊符號,下列代碼會將標題中的冒號、引號替換為下劃線。
# coding:utf-8import reimport requestsimport urllibimport os# get web contextr = requests.get(http://openaccess.thecvf.com/CVPR2017.py)data = r.text# find all pdf linkslink_list = re.findall(r"(?<=href=").+?pdf(?=">pdf)|(?<=href=).+?pdf(?=">pdf)" ,data)name_list = re.findall(r"(?<=href=").+?2017_paper.html">.+?</a>" ,data)cnt = 0num = len(link_list)# your local path to download pdf fileslocalDir = E:CVPR2017\if not os.path.exists(localDir): os.makedirs(localDir)while cnt < num: url = link_list[cnt] # seperate file name from url links file_name = name_list[cnt].split(<)[0].split(>)[1] # to avoid some illegal punctuation in file name file_name = file_name.replace(:,_) file_name = file_name.replace(",_) file_name = file_name.replace(?,_) file_name = file_name.replace(/,_) file_path = localDir + file_name + .pdf # download pdf files print [+str(cnt)+/+str(num)+"] Downloading -> "+file_path try: urllib.urlretrieve(http://openaccess.thecvf.com/+url,file_path) except Exception,e: continue cnt = cnt + 1print "all download finished"
如果大家覺得麻煩可以把代碼中的
file_name = file_name.replace(:,_)file_name = file_name.replace(",_)file_name = file_name.replace(?,_)file_name = file_name.replace(/,_)
替換成
import stringfile_name = file_name.translate(None,string.punctuation)
這樣可以將標題中所有的標點符號統統刪去,一開始沒這麼做是因為覺得連接符還是留著更好,不過沒想到遇到這麼多標題中符號的坑,還是太naive了。
如果需要下載時包含paper的supplement文件,那麼在link_list的正則表達式那一塊可以使用
link_list = re.findall(r"(?<=href=").+?pdf(?=")|(?<=href=).+?pdf(?=)" ,data)
這裡的link_list包括了paper和supplement的鏈接,不過這時候的name_list中元素的數量依然和paper數量一直,所以,對於下載文件的命名的對應還需要對代碼進行修改。
推薦閱讀:
※python作為腳本語言和c/c++ 等語言的優勢和劣勢在哪裡地方?python比較成熟用途在哪裡方面?
※學會最簡單的資料庫|看完這7招就夠了
※Python 閉包代碼理解?
※Python3實現TCP埠掃描器
※如何用Python和機器學習炒股賺錢?