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.
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.