Как записать все данные из ссылок?

Пожалуйста, помогите найти решение, мне нужно скачать все файлы стилей со страницы в один файл. Для этого я использую bs4 для получения всех ссылок. Для получения контента со страницы я использую requests

# Получаю строки с атрибутом stylesheet
all_url_links = soup.find_all(attrs={"rel": "stylesheet"})

for item in all_url_links:
    # Получаю все ссылки из атрибута href
    all_url_styles = item.get('href')

    # Отпраляю запрос на каждую страницу по ссылке
    page_style = requests.get(all_url_styles, headers=headers)
    
    # Записываю в файл
    with open('all_styles.css', 'w') as file:
        for i in page_style:
            file.write(page_style.text)

Но в файл записываются стили только из одной ссылки. Как мне записать все стили из всех ссылок которые я получил в переменной all_url_styles


Ответы (1 шт):

Автор решения: gil9red

Причина в with open('all_styles.css', 'w') as file:, а точнее в w. Этот флаг очищает файл перед тем как записать в него

Решением может быть использование флага a:

with open('all_styles.css', 'a') as file:
    file.write(page_style.text)

Еще вариантом будет заранее открыть файл и при переборе ссылок записывать в него:

# Получаю строки с атрибутом stylesheet
all_url_links = soup.find_all(attrs={"rel": "stylesheet"})

# Записываю в файл
with open('all_styles.css', 'w') as file:
    for item in all_url_links:
        # Получаю все ссылки из атрибута href
        all_url_styles = item.get('href')
    
        # Отпраляю запрос на каждую страницу по ссылке
        rs = requests.get(all_url_styles, headers=headers)
        file.write(rs.text + "\n")
→ Ссылка