как узнать номер индекса последней страницы для моего запроса на публикацию для данного веб-сайта, когда он изменяется динамически - PullRequest
2 голосов
/ 12 июля 2020

указанный веб-сайт введите здесь описание ссылки динамически загружает данные своей таблицы всякий раз, когда полоса прокрутки достигает конечной точки окна. он также генерирует новый почтовый запрос с новым номером индекса страницы для загрузки новых данных для таблицы. Я хочу отправить несколько почтовых запросов, чтобы я мог загрузить все данные таблицы, а затем очистить их. как я могу узнать, каким будет последний номер индекса, который должен быть отправлен вместе с моим запросом.

import requests
from bs4 import BeautifulSoup


url = 'https://www.ungm.org/Public/Notice/Search'

payload = {
      "PageIndex": 0,
      "PageSize": 15,
      "Title": "",
      "Description": "",
      "Reference": "",
      "PublishedFrom": "",
      "PublishedTo": "12-Jul-2020",
      "DeadlineFrom": "12-Jul-2020",
      "DeadlineTo": "",
      "Countries": [],
      "Agencies": [],
      "UNSPSCs": [],
      "NoticeTypes": [],
      "SortField": "DatePublished",
      "SortAscending": False,
      "isPicker": False,
      "NoticeTASStatus": [],
      "IsSustainable": False,
      "NoticeDisplayType": None,
      "NoticeSearchTotalLabelId": "noticeSearchTotal",
      "TypeOfCompetitions": []
    }

Я хочу, чтобы эта строка выполнялась столько раз, сколько раз eqaul до max индекс страницы.

soup = BeautifulSoup( requests.post(url, json=payload).content, 'html.parser' )

1 Ответ

2 голосов
/ 12 июля 2020

Чтобы узнать индекс последней страницы, вы можете выбрать все строки из результата публикации. Если результат равен нулю (строки не выбраны, вы находитесь на последней странице).

Например:

import requests
from bs4 import BeautifulSoup


url = 'https://www.ungm.org/Public/Notice/Search'

payload = {
  "PageIndex": 0,
  "PageSize": 15,
  "Title": "",
  "Description": "",
  "Reference": "",
  "PublishedFrom": "",
  "PublishedTo": "12-Jul-2020",
  "DeadlineFrom": "12-Jul-2020",
  "DeadlineTo": "",
  "Countries": [],
  "Agencies": [],
  "UNSPSCs": [],
  "NoticeTypes": [],
  "SortField": "DatePublished",
  "SortAscending": False,
  "isPicker": False,
  "NoticeTASStatus": [],
  "IsSustainable": False,
  "NoticeDisplayType": None,
  "NoticeSearchTotalLabelId": "noticeSearchTotal",
  "TypeOfCompetitions": []
}

page = 0
while True:
    print('Page {}...'.format(page))

    payload['PageIndex'] = page
    soup = BeautifulSoup( requests.post(url, json=payload).content, 'html.parser' )

    rows = soup.select('.tableRow')

    # no more data, exit!
    if not rows:
        break

    page += 1

Выводит:

Page 0...
Page 1...
Page 2...
Page 3...

...

Page 49...
Page 50...
Page 51...
...