Python3.6 - 在从 Internet 下载之前检查文件是否在本地文件夹中无法正常工作

Python3.6 - checking if file is in local folder before downloading from internet does not work properly

我编写了一个从 arxiv.org 下载 pdf 文件的程序。它不会是一个下载机器人,但我现在用它来让我的程序运行。如果我让它工作,它可以是一个通用代码。如果您打算使用该代码,请阅读 arxiv.org 上的机器人警告。他们参考亚马逊进行批量下载。

因为我不想下载同一个文件两次,所以我检查它是否已经在计算机上的 python 文件的文件夹中。问题是它不能正常工作,因为有时程序会识别硬盘上的文件而不会下载,但有时会再次下载文件。

这意味着我相信代码会做某事,但它会做其他事情。

代码如下:

import requests
from bs4 import BeautifulSoup
import re
import os
import os.path

axx= '.pdf'

# specify the URL of the archive here
archive_url = "https://arxiv.org/list/quant-ph/new"
def get_links():

    # create response object
    r = requests.get(archive_url)

    # create beautiful-soup object
    soup = BeautifulSoup(r.content,'html5lib')

    # find all links on web-page
    links = soup.findAll('a', attrs = {'title' : 'Download PDF'})
    #take out the numbering of pdf-files on arxiv.
    #links = re.findall(('\d+'+'.'+'\d+'), links)
    # filter the link sending with .mp4 or other file type
    ''''
    source 1
    https://arxiv.org/list/math/new
    html =  a href="/pdf/1705.04681" title="Download PDF">pdf</a>

    source 2
    '''
    #_links = [archive_url + link['href'] for link in links if link['href'].endswith('mp4')]
    file_links = ['https://arxiv.org'+link['href'] for link in links if link['href']+axx]

    #rinse duplicates fomr list if file already is on harddrive
    file_links = list(set(file_links))


    for link in file_links:
        if os.path.isfile(os.getcwd()+'/'+link.split('/')[-1]+axx) == True:
                          file_links.remove(link)              
        else:
            return file_links

def download_series(file_links):
    for link in file_links:

        # obtain filename by splitting url and getting
        # last string
        file_name = (link.split('/')[-1]+axx)
        print("Downloading file:%s"%file_name)

        # create response object
        r = requests.get(link, stream = True)

        # download started
        with open(file_name, 'wb') as f:
            for chunk in r.iter_content(chunk_size = 2048*2048):
                if chunk:
                    f.write(chunk)

        print("%s downloaded!\n"%file_name)
    print("All files downloaded!")
    return


if __name__ == "__main__":
    # getting all pdf links
    file_links = get_links()
    # download all pdfs
    download_series(file_links)

get_links 中的 for 循环删除本地文件,否则 return 全部 file_links。我认为 get_links 应该 return 要下载的 pdf 列表(如果在磁盘上找不到)。示例:

file_links = list(set(file_links))
return [ 
    link for link in file_links 
    if not os.path.isfile(os.getcwd()+'/'+link.split('/')[-1]+axx) 
]