Оптимизация кода python

есть вот такой скрипт:

import requests
from bs4 import BeautifulSoup as BS
import os

pages = []

for x in range(4615):
    pages.append(requests.get('https://link.com/companies/' + str(x)))

for r in pages:
    html = BS(r.content, 'html.parser')

    for el in html.select('.show-company'):

        title = el.select('.panel-body > .right-part > .right-panel')
        id = title[0].get('data-id')
        name = title[0].get('data-name')
        description = title[0].get('data-description')
        url = title[0].get('data-website-url')

        os.mkdir(id)

        n = open(id +'/name.txt', 'w')
        n.write(name)
        n.close()

        d = open(id +'/description.txt', 'w')
        d.write(description)
        d.close()

        u = open(id +'/url.txt', 'w')
        u.write(url)
        u.close()

Если поставить for x in range(20): вместо for x in range(4615):, то скрипт начнёт выполняться через секунд 7-10, если же поставить 4615, то не понятно, начнёт ли он выполняться вообще. Как я понимаю, изначально в цикле открываются все страницы, а потом следующий цикл начинает уже их обрабатывать. Пробовал сам менять код, но всё время выпадало вот в эту ошибку: IndentationError: expected an indented block

Можно ли сделать так, что бы скрипт открывал одну страницу, брал из неё информацию, закрывал и переходил к следующей?


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

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

Вот так можно :

import os

import requests 
from bs4 import BeautifulSoup as BS

for x in range(4615):
    r = requests.get('https://link.com/companies/' + str(x))
    html = BS(r.content, 'html.parser') 
    for el in html.select('.show-company'):
        title = el.select('.panel-body > .right-part > .right-panel') 
        id = title[0].get('data-id') 
        name = title[0].get('data-name')
        description = title[0].get('data-description') 
        url = title[0].get('data-website-url')
        os.mkdir(id)
        with open(id +'/name.txt', 'w') as n, open(id +'/description.txt', 'w') as d, open(id +'/url.txt', 'w') as u:
            n.write(name)
            d.write(description)
            u.write(url)
→ Ссылка