Pregunta

Entonces, digamos que estoy usando BeautifulSoup para analizar páginas y mi código determina que hay al menos 7 páginas por consulta.

La paginación se ve como

 1 2 3 4 5 6 7 Next

Si compagino todo el camino a 7, a veces hay más de 7 páginas, de modo que si estoy en la página 7, la paginación se ve como

 1 2 3    7 8 9 10 Next

Entonces, ahora sé que hay al menos 3 páginas más. Estoy usando un pase inicial para averiguar cuántas páginas, es decir, get_num_pages devuelve 7

Lo que estoy haciendo es iterar sobre los elementos en cada página, así que tengo algo como

for page in range(1,num_pages + 1):
  # do some stuff here

¿Hay alguna forma de actualizar dinámicamente el rango si el script se da cuenta de que hay más de 7 páginas? Supongo que otro enfoque es mantener un recuento y cuando llegue a la página 7, manejar eso por separado. Estoy buscando sugerencias y soluciones para la mejor manera de abordar esto.

¿Fue útil?

Solución

Probablemente puedas & # 231; reate un generador que tiene un estado mutable que determina cuándo termina ... pero ¿qué pasa con algo tan simple como esto?

page = 1
while page < num_pages + 1:
    # do stuff that possibly updates num_pages here
    page += 1

Otros consejos

Aquí hay una respuesta sin código, pero creo que es simple si aprovechas lo que la hermosa sopa te permite hacer:

Para comenzar, en la primera página tiene los números de página & amp; campo de golf; de su pregunta se ven así:

1 2 3 4 5 6 7 [next]

Los diferentes sitios manejan la paginación de manera diferente, algunos dan un enlace para saltar al principio / final, pero en el suyo usted dice que se ve así después de las primeras 7 páginas:

1 2 3 ... 7 8 9 10 [next]

Ahora, en algún momento, llegarás al final, se verá así:

1 2 3 ... 20 21 22 23

Observe que no hay un enlace [siguiente].

Olvídese de los generadores y los rangos y realice un seguimiento de los rangos intermedios, etc. Simplemente haga esto:

  1. use la sopa hermosa para identificar los enlaces de la página # en una página determinada, junto con el siguiente botón.
  2. Cada vez que vea un enlace [siguiente], sígalo y repáselo con una sopa hermosa
  3. Cuando llegas a una página donde no hay un enlace siguiente, el último # enlace de la página es el número total de páginas.

Me gusta la solución basada en mientras que de John, pero usar un para podría hacer algo como:

pages = range(1, num_pages+1)
for p in pages:
   ...possibly pages.extend(range(something, something)) here...

es decir, debe asignar un nombre al rango en el que realiza el bucle, para que pueda ampliarlo cuando sea necesario. Cambiar el contenedor en el que está iterando normalmente es mal visto, pero en este caso específico y altamente restringido, en realidad puede ser un lenguaje útil.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top