Скачать несколько ссылок, полученных на каталог в ОС, используя Python3 - PullRequest
0 голосов
/ 16 марта 2020

Я использовал BeautifulSoup для анализа сайта, и у меня уже есть ссылки (только ссылки, а не теги). Ссылки находятся в списке в словаре с 4 различными типами? (Ссылки имеют значение). Кроме того, ссылки в формате строки, а не гиперссылки.

Я хочу скачать каждую ссылку по моей ОС по одной. Я использую python3. Я уже пытался использовать web browser.open, использовал url lib и другие доступные опции, но ничего не получалось. Либо я что-то пропустил, либо мой подход неправильный. Любая помощь будет оценена?

Ниже приведен код, который я написал до сих пор:

url = ('url1', 'url2', 'url3')

extensions = ['a','b','c','d'] def Convert(string): 
    li = list(string.split(" ")) 
    return li

def add_extensions(url_t):
    list_name=list()
    temp_extensions=list()
    for i in extensions:
        temp_name = "list_of_"+i
        list_name.append(temp_name)
        temp_extensions.append(i+"#") #to get only the links that ends with extensions=['a','b','c','d']
    myDict = {}
    for i in range(len(extensions)):
        lists_links = list()
        for link in url_t:
            page = requests.get(link, allow_redirects=True)
            soup = BeautifulSoup(page.text, 'html.parser')#create beautifulsoup object
            for b in soup.find_all('a', href = re.compile(temp_extensions[i])):    
                lists_links.append(b['href'])
            myDict[list_name[i]]=lists_links
    return myDict

my_dict=add_extensions(url) 
my_dict 

*

Output of the above code looks like this:

{'list_of_a': ['urlA.a','urlB.a','urlC.a'],
  'list_of_b' :['urlD.b','urlE.b','urlF.b'],
  'list_of_c':['urlG.c','urlH.c','urlI.c']}

*

Приведенный ниже фрагмент кода выдает ошибку, 'list_name' не определено. Я пытаюсь загрузить его в ОС один за другим:

Download_dir = '/path/to/download' 
for url_d in open (list_name):
    name = url_d.rsplit('/', 1)[-1]
    filename = os.path.join(Download_dir, name)
    if not os.path.isfile(filename):
        urllib.urlretrieve(url_d, filename)
...