J'ai le code suivant qui fonctionne bien:

import requests
from bs4 import BeautifulSoup
import pandas as pd

df_list = []
for i in range(1, 13):
    url = 'https://www.uzse.uz/trade_results?date=25.01.2019&mkt_id=ALL&page=%d' %i
    df_list.append(pd.read_html(url)[0])

df = pd.concat(df_list)
df

Mais pour cette page particulière, je connais le nombre de pages, qui est de 13 en range(1, 13). Existe-t-il un moyen de définir la dernière page donc je n'ai pas à aller vérifier combien de pages il y a sur une page donnée?

1
AK88 28 janv. 2019 à 00:54

3 réponses

Meilleure réponse

Essayez avec

for i in range(1, 100):

    url = 'https://www.uzse.uz/trade_results?date=25.01.2019&mkt_id=ALL&page=%d' %i
    if pd.read_html(url)[0].empty:
        break
    else :
        df_list.append(pd.read_html(url)[0])

page=0                    # using while
while page > 0:
   url = 'https://www.uzse.uz/trade_results?date=25.01.2019&mkt_id=ALL&page=%d' % i
   df_list.append(pd.read_html(url)[0])
   page = page + 1
   if pd.read_html(url)[0].empty:
      break

print(page)
2
YO and BEN_W 27 janv. 2019 à 22:05

Pour ce site Web particulier, vous pouvez détecter le nombre de pages de la barre de pagination. Vous pouvez utiliser quelque chose de similaire à l'extrait de code suivant:

from bs4 import BeautifulSoup
import requests
r = requests.get('https://www.uzse.uz/trade_results?date=25.01.2019&mkt_id=ALL')
soup = BeautifulSoup(r.text, 'html.parser')
lastpage_url = soup.find("li", {"class": "last next"}).findChildren("a")[0]['href']
num_pages = int(lastpage_url[lastpage_url.rfind("=")+1:])
1
abdullah.cu 27 janv. 2019 à 22:32

Je connais le nombre de pages, qui est de 13 en range(1, 13).

Vous semblez souffrir d'un OBOB (https://en.wikipedia.org/wiki / Off-by-one_error). Mettez un print(i) dans votre boucle et vous verrez que cela compte de 1 à 12.

Vous pourriez être plus heureux avec:

for i in range(13):

Puis utilisez l'expression ... % (i + 1).

Cf https://docs.python.org/3/library/stdtypes.html #range

1
J_H 27 janv. 2019 à 22:07