Cómo descargar todos los href (pdf) dentro de una clase con Python Beautiful Soup?
Tengo alrededor de 900 páginas y cada página contiene 10 botones (cada botón tiene un pdf). Quiero descargar todos los pdf: el programa debe navegar por todas las páginas y descargar los pdf uno por uno.
El código solo busca archivos .pdf, pero mi href no tiene la extensión .pdf page_no (1 a 900).
https://bidplus.gem.gov.in/bidlists?bidlists&page_no=3
Este es el sitio web y a continuación se encuentra el enlace:
<p class="bid_no pull-left"> BID NO: <a style="color:#fff !important" href="/showbidDocument/2989799">GEM/2021/B/1804626</a></p>
import os
import requests
from urllib.parse import urljoin
from bs4 import BeautifulSoup
url = "https://bidplus.gem.gov.in/bidlists"
# Si no existe esa carpeta, el script la creará automáticamente.
folder_location = r'C:\webscraping'
if not os.path.exists(folder_location):
os.mkdir(folder_location)
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
for link in soup.select("a[href$='.pdf']"):
# Nombrar los archivos pdf utilizando la última parte de cada enlace, que es única en este caso.
filename = os.path.join(folder_location, link['href'].split('/')[-1])
with open(filename, 'wb') as f:
f.write(requests.get(urljoin(url, link['href'])).content)
davy.ai
Para descargar todos los pdf’s del sitio web que contiene 900 páginas con 10 botones cada una, debemos modificar el código existente para navegar por todas las páginas y descargar los pdf’s uno por uno. Podemos lograr esto utilizando un bucle for que itere a través de todas las páginas y un bucle for anidado que itere a través de todos los botones en cada página para obtener los enlaces a los pdf’s.
El código modificado se muestra a continuación:
En el código anterior, comenzamos navegando por todas las páginas utilizando un bucle for que va desde 1 hasta 900. Dentro del bucle, construimos la URL de la página agregando el número de página a la URL base utilizando el parámetro de consulta “page_no”.
A continuación, enviamos una solicitud a la URL de la página y creamos un objeto BeautifulSoup para analizar el contenido HTML. Luego, utilizamos otro bucle for para iterar a través de todos los botones en la página que tienen un enlace que comienza con “/showbidDocument/”.
Para cada botón, agregamos la URL base “https://bidplus.gem.gov.in” para obtener la URL absoluta del pdf. Luego extraemos el nombre de archivo de la URL y lo unimos con la ubicación de la carpeta para crear la ruta del archivo. Finalmente, utilizamos la biblioteca requests para descargar el pdf y guardarlo en la ruta del archivo.
Al ejecutar este código, todos los pdf’s del sitio web se descargarán y guardarán en la ubicación de carpeta especificada.