Очистите таблицу, перебирая страницы веб-сайта: как определить последнюю страницу? - PullRequest
0 голосов
/ 28 января 2019

У меня есть следующий код, который работает нормально:

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

Но для этой конкретной страницы я знаю количество страниц, которое составляет 13 в range(1, 13).Есть ли способ определить последнюю страницу, чтобы мне не приходилось проверять, сколько страниц на данной странице?

Ответы [ 3 ]

0 голосов
/ 28 января 2019

Я знаю количество страниц, которое составляет 13 в range(1, 13).

Вы, похоже, страдаете от ОБОБ (https://en.wikipedia.org/wiki/Off-by-one_error). Положите print(i)в вашем цикле, и вы увидите, что он насчитывает от 1 до 12.

Вы можете быть счастливее с:

for i in range(13):

и затем использовать выражение ... % (i + 1).

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

0 голосов
/ 28 января 2019

Для этого конкретного веб-сайта вы можете определить количество страниц на панели нумерации страниц.Вы можете использовать нечто похожее на следующий фрагмент кода:

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:])
0 голосов
/ 28 января 2019

Попробуйте с

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