標籤:

python下載CVPR2017全套paper

實驗環境:python 2.7

很簡單的爬蟲,沒太多技術含量,就直接貼代碼了。一共783篇paper已經打包上傳,鏈接:pan.baidu.com/s/1o88xV4 密碼: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和機器學習炒股賺錢?

TAG:Python | CVPR |