es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Paginación de Web Scraping utilizando Beautiful Soup Python

import csv
import pandas as pd
root_url = "https://hjrs.hec.gov.pk/index.php?r=site%2Franking&page=1"
html = requests.get(root_url,verify=False)
soup = BeautifulSoup(html.text, 'html.parser')

paging = soup.find("div",{"class":"grid-view"}).find("ul",{"class":"pagination"}).find_all("a")
start_page = paging[1].text
last_page = paging[len(paging)-2].text

outfile = csv.writer(open('Mona.csv', 'w', newline=''))
outfile.writerow(['Title','Links'])

pages = list(range(1,int(last_page)+1))
for page in pages:
    url = 'https://hjrs.hec.gov.pk/index.php?r=site%2Franking&page=1' %(page)
    html = requests.get(url)
    soup = BeautifulSoup(html.text, 'html.parser')

    #print(soup.prettify())
    print ('Processing page: %s' %(page))

    Title_list = soup.findAll("div",{"class":"table table-striped table-bordered table-responsive w-100 d-md-table"})
    for element in Title_list:
        Title1 =Title_list.find_all('a')
        Title = Title1.contents[0] 
        Links ='https://web.archive.org8' + artist_name.get('href')

        writer.writerow([Title,Links])

outfile.close()
print ('Done')  

Me da este error

ValueError                                Traceback (most recent call last)
 in ()
     12 outfile .writerow(['Title','Links'])
     13 
---> 14 pages = list(range(1,int(last_page)+1))
     15 for page in pages:
     16     url = 'https://hjrs.hec.gov.pk/index.php?r=site%2Franking&page=1' %(page)

ValueError: invalid literal for int() with base 10: '"»"'

Por favor, explique cómo puedo solucionarlo.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error indica que se está pasando un literal no válido a la función int(), lo cual está provocando un error de valor. El literal en cuestión es », que es un carácter especial que no se puede convertir a entero.

    Para solucionar este error, debes verificar la fuente de la variable last_page, que se está utilizando en la función range() para generar una lista de páginas. Parece ser que last_page no está siendo analizado o limpiado correctamente, lo cual está causando el error de literal no válido.

    Puedes comenzar imprimiendo el valor de last_page antes de llamar a la función range() para ver qué valor contiene. Si tiene un carácter no numérico, puedes intentar eliminarlo utilizando manipulación de cadenas o expresiones regulares.

    Alternativamente, puedes modificar el código para manejar valores no numéricos verificando estos casos antes de convertirlos a enteros. Por ejemplo, puedes agregar una declaración if que verifique si last_page es un número antes de convertirlo a entero:

    if last_page.isdigit():
    pages = list(range(1,int(last_page)+1))
    else:
    # manejar el valor no numérico de last_page

    Esto asegurará que la función range() solo se llame si last_page es un entero válido, evitando el error de valor.

Comments are closed.