Código para raspagem de URLs

def get_status(url):
return get(url).status_code

base_url = “minha_url”
RANGE = 10000

list_of_links = [f"{base_url}{num}" for num in range(1, RANGE + 1)]
edital = namedtuple(‘Edital’, ‘url status’)
sleep(random.uniform(0.2, 10))

generator comprehension

to_download = (edital(link, get_status(link)) for link in list_of_links)

write csv

Normal demorar para rodar?

1 Curtida

Oi, Rosangela. Tudo bem?

Qual é a sua url? Quero tentar rodar aqui.

1 Curtida

Oi Gabi, é uma matéria em produção. Passo depois de publicada, semana que vem.

Mas rodou certinho, no tempo da minha máquina que me acompanha a muitos anos.

1 Curtida

Talvez seja a quantidade de urls vezes o tempo, que pode chegar a 10 segundos entre uma url e outra. É possível que leve menos tempo com random.uniform(0.2, 2), por exemplo. (Ou seja, máximo de 2 segundos entre uma url e outra).

(Fiquei em dúvida no “write csv”… Você está usando pandas ou csv mesmo? Pandas pode tomar tempo consideravelmente maior para escrever csv.)

1 Curtida

Obrigada pela dica Rodolfo vou tentar com random menor. A carga de requisição total é 90000, estou fazendo por lotes para o PC não explodir rsrsrs

A saída é em csv mesmo.

Obrigada

Fiz um script aqui (não testei pois estou sem ideia de URL de teste) que te retorna número do edital, link e código de status de cada link, e salva tudo isso num csv. O tempo de espera entre uma URL e outra é de 0.2 a 1 segundo.

Veja se funciona. Qualquer erro me chama e conserto o código.

import requests
import csv

URL_BASE = 'https://suaurl.com/'
FAIXA = 90000

with open('lista.csv', 'w') as file:
    cols = ['Edital','URL', 'Status']
    writer = csv.writer(file, fieldnames=cols, delimiter=',')
    writer.writeheader()
    for num in range(1, FAIXA+1):
        edital = num
	url_edital = f'{URL_BASE}{num}'
        codigo = requests.get(url_edital).status_code
        writer.writerow({'Edital': edital, 'URL': url_edital, 'Status': codigo})
        sleep(random.uniform(0.2, 1))
1 Curtida

Que legal Rodolfo. Vou testar e depois te falo, mas a dica de diminuir de 10s para 2s acelerou as requisições. Já valeu, mas vou rodar seu código.
Obrigada

2 Curtidas