Обновление параметров обратного вызова для отправки запросов на публикацию на сайт

Достаточно просто отправить GET запрос на URL-адрес https://apps.fpb.org.za/erms/fpbquerytitle.aspx?filmtitle=&Submit1=Search, чтобы получить первую страницу результатов поиска на сайте.

Однако я не могу понять, как запросить последующие страницы, которые включают отправку запроса POST на тот же URL-адрес, но с множеством параметров данных формы.

Мне удалось получить результаты страницы 2 следующим образом:

with requests.session() as s:

    ### REQUESTING FIRST PAGE

    r = s.request('get', 'https://apps.fpb.org.za/erms/fpbquerytitle.aspx?filmtitle=&Submit1=Search')
    soup = BeautifulSoup(r.content, 'html.parser')


    ### REQUESTING SECOND PAGE

    page_number = 2
    form_data = {
        '__EVENTTARGET': '',
        '__EVENTARGUMENT': '',   
        '__VIEWSTATE': soup.find('input', id = '__VIEWSTATE').get('value'),
        '__VIEWSTATEGENERATOR': soup.find('input', id = '__VIEWSTATEGENERATOR').get('value'),
        '__EVENTVALIDATION': soup.find('input', id = '__EVENTVALIDATION').get('value'),
        'vwfpbquerytitle_DXKVInput': soup.find('input', id = 'vwfpbquerytitle_DXKVInput').get('value'),
        'vwfpbquerytitle$CallbackState': soup.find('input', id = 'vwfpbquerytitle_CallbackState').get('value'),
        'vwfpbquerytitle$DXSelInput': soup.find('input', id = 'vwfpbquerytitle_DXSelInput').get('value'),
        'vwfpbquerytitle_DXHFPWS': soup.find('input', id = 'vwfpbquerytitle_DXHFPWS').get('value'),
        'popupControlWS': soup.find('input', id = 'popupControlWS').get('value'),     
        'DXScript': '1_155,1_87,1_147,1_97,1_123,1_106,1_113,1_84,1_139,1_137,1_98,1_135',
        '__CALLBACKID': 'vwfpbquerytitle',
        '__CALLBACKPARAM': (
            f"c0:KV|777;{soup.find('input', id = 'vwfpbquerytitle_DXKVInput').get('value')};GB|20;12|PAGERONCLICK3|PN{page_number - 1};",
        ),
    }
    r2 = s.request('post', 'https://apps.fpb.org.za/erms/fpbquerytitle.aspx?filmtitle=&Submit1=Search', data = form_data)
    soup2 = BeautifulSoup(r.content, 'html.parser')

Но последний ответ r2 не дает мне никаких указаний на то, какими должны быть постоянно меняющиеся параметры __CALLBACKPARAM и vwfpbquerytitle$CallbackState для следующего запроса, поскольку они отсутствуют нигде в ответе HTML. Фактически, единственная причина, по которой я могу правильно установить __CALLBACKPARAM для второго запроса выше, заключается в том, что, проверив веб-сайт, я вижу, что такие шаблоны, как c0:KV|777 и т. д., всегда присутствуют для этого второго запроса.

Итак, мой вопрос: как я могу запросить последующие страницы после этого момента? Потому что установка __CALLBACKPARAM предыдущим способом, например.

page_number = 5
'__CALLBACKPARAM': f"c0:KV|777;{soup.find('input', id = 'vwfpbquerytitle_DXKVInput').get('value')};GB|20;12|PAGERONCLICK3|PN{page_number - 1};"

просто дает мне ту же вторую страницу результатов, что и раньше

сначала вы можете использовать print(), чтобы увидеть, что у вас есть form_data, прежде чем отправлять POST. Затем вы можете отправить запрос на URL https://httpbin.org/post, и он отправит вам все данные, которые вы отправляете - и вы можете сравнить их с запросом, который делает браузер для исходной страницы - вы можете проверить это в DevTool (вкладка: Сеть) в Chrome/Firefox.

furas 28.06.2024 16:53

ты проверял, что ты получаешь r.content? Возможно, вы не можете найти новые значения, потому что вместо таблицы вам отправляется капча или предупреждение.

furas 28.06.2024 17:04

вы проверяли, работает ли веб-страница без JavaScript? Я отключил JavaScript и не могу перейти на следующие страницы. Кажется, он использует JavaScript для отправки запросов - и, вероятно, он использует JavaScript для получения новых данных (возможно, даже в формате JSON) и замены данных в HTML. Но requests и Beautifulsoup не могут запускать JavaScript, поэтому вам может потребоваться использовать Selenium для управления реальным веб-браузером, который может запускать JavaScript. ИЛИ вам нужно проверить, получает ли JavaScript их как JSON (или проверить, что вы получаете r.content), и получать данные непосредственно из JSON.

furas 28.06.2024 17:08
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
3
119
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Можешь попробовать:

import requests
from bs4 import BeautifulSoup

with requests.session() as s:
    ### REQUESTING FIRST PAGE
    r = s.request(
        "get",
        "https://apps.fpb.org.za/erms/fpbquerytitle.aspx?filmtitle=&Submit1=Search",
    )
    soup = BeautifulSoup(r.content, "html.parser")

    ### REQUESTING SECOND PAGE
    page_number = 2
    form_data = {
        "__EVENTTARGET": "",
        "__EVENTARGUMENT": "",
        "__VIEWSTATE": soup.find("input", id = "__VIEWSTATE").get("value"),
        "__VIEWSTATEGENERATOR": soup.find("input", id = "__VIEWSTATEGENERATOR").get(
            "value"
        ),
        "__EVENTVALIDATION": soup.find("input", id = "__EVENTVALIDATION").get("value"),
        "vwfpbquerytitle_DXKVInput": soup.find(
            "input", id = "vwfpbquerytitle_DXKVInput"
        ).get("value"),
        "vwfpbquerytitle$CallbackState": soup.find(
            "input", id = "vwfpbquerytitle_CallbackState"
        ).get("value"),
        "vwfpbquerytitle$DXSelInput": soup.find(
            "input", id = "vwfpbquerytitle_DXSelInput"
        ).get("value")
        or "",
        "vwfpbquerytitle_DXHFPWS": soup.find("input", id = "vwfpbquerytitle_DXHFPWS").get(
            "value"
        ),
        "popupControlWS": soup.find("input", id = "popupControlWS").get("value"),
        "DXScript": "1_155,1_87,1_147,1_97,1_123,1_106,1_113,1_84,1_139,1_137,1_98,1_135",
        "__CALLBACKID": "vwfpbquerytitle",
    }

    out = []
    for a in soup.select('a[href* = "OnMoreInfoClick"]'):
        n = a["href"].split("'")[1]
        out.append(f"'{n}'")
    out = "[" + ",".join(out) + "]"

    form_data["vwfpbquerytitle$DXKVInput"] = out
    form_data["__CALLBACKPARAM"] = (
        "c0:KV|777;" + out + f";GB|20;12|PAGERONCLICK3|PN{page_number - 1};"
    )

    r2 = s.post(
        "https://apps.fpb.org.za/erms/fpbquerytitle.aspx?filmtitle=&Submit1=Search",
        data=form_data,
    )
    print(r2.text)

Распечатки:

136|/wEdAARKrjU6Djm/Pf2UMfsBdPBueGtl5Zjo7OaqmtERWdpGb1qEr2S6U0cHWeDguTOoFcLDUR1PJV1y6+qSR+KbO2bjbpAeGOCx0AJxom1Uvdz2mU2AKpI22OI5W9ESvqARKTM=/*DX*/({'id':0,'result':'<table id = "vwfpbquerytitle_DXMainTable" class = "dxgvTable_PlasticBlue" cellspacing = "0" cellpadding = "0" onclick = "aspxGVTableClick(&#39;vwfpbquerytitle&#39;, event);" style = "width:100%;border-collapse:collapse;empty-cells:show;">

...

Это не работает для запроса каких-либо страниц после запроса страницы 2. Он просто возвращает те же данные, которые присутствовали на странице 2. __CALLBACKPARAM не сохраняет ту же структуру, т.е. 'c0:KV|777' меняется на, казалось бы, случайные значения, такие как ' c0:KV|771', 774, 769 и т. д., а «PAGERONCLICK3» становится «PAGERONCLICK5» для последующих страниц на стр. ~390.

Elis Evans 28.06.2024 18:07

Я подумывал написать ответ на этот пост, но когда я наткнулся на ваше решение, я быстро его протестировал и обнаружил, что оно работает безупречно. Какой бы номер страницы я ни ввел в переменную page_number или не использовал для создания диапазона, скрипт соответствующим образом анализирует данные с этой страницы, поэтому ваш ответ должен быть принят @Andrej Kesely.

SIM 29.06.2024 23:01

@SIM Вы пытались проверить код с любым номером страницы, содержащим 2 или более цифр? Он возвращает неправильную страницу. Например, 127 или 177 дадут тот же результат, что и на странице 1, а 55 даст результат на странице 5. Больше я не проверял. Но могу сказать, что жестко запрограммированные значения в этом ответе, который ОП называет «случайным», вовсе не случайны. Они представляют длину строки. Фактический синтаксис: value type id|len(value);value; Таким образом, для двухзначных страниц это будет GB|21;12|PAGERONCLICK4|PN{page_number - 1};. Для 3-значных страниц GB|22;12|PAGERONCLICK5|PN{page_number - 1};

m3cc 30.06.2024 00:35

@ElisEvans Я думаю, что моего другого комментария достаточно, чтобы завершить ваш проект. Если вы можете использовать Selenium, гораздо проще запросить страницу с помощью этого простого вызова JavaScript aspxGVPagerOnClick('vwfpbquerytitle','PN177');

m3cc 30.06.2024 00:41
Ответ принят как подходящий

Единственная переменная часть __CALLBACKPARAM, которая имеет значение: PAGERONCLICK{}, 2{};12 и PN{}.

__VIEWSTATE, __CALLBACKID и vwfpbquerytitle$CallbackState на самом деле менять не нужно.

спасибо @xoxouser за то, что он выяснил, что 777 — это длина str(массива), это была единственная часть, которая казалась случайной, но в конечном итоге это не имело значения; до тех пор, пока он соответствует предоставленному массиву.

Вот код:

import requests

headers = {
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36',
}

params = {
    'filmtitle': '',
    'Submit1': 'Search',
}

data = {
    "__VIEWSTATE": "/wEPDwUKLTMyMDI3MDk3MQ9kFgICAw9kFgICAQ88KwAaAgAPFgIeD0RhdGFTb3VyY2VCb3VuZGdkFzwrAAYBBRQrAAJkZGQYAgUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgUFD3Z3ZnBicXVlcnl0aXRsZQUVdndmcGJxdWVyeXRpdGxlJERYSEZQBSJ2d2ZwYnF1ZXJ5dGl0bGUkRFhIRlAkVFBDRkNtMSRUQyRPBSJ2d2ZwYnF1ZXJ5dGl0bGUkRFhIRlAkVFBDRkNtMSRUQyRDBQxwb3B1cENvbnRyb2wFEUVudGl0eURhdGFTb3VyY2UxDzwrAAkBAQ9oZGQs+akQiwv01gWVLky5TJXi94fPtkrfInkrLr1p5PmBGQ= = ",
    "__CALLBACKID": "vwfpbquerytitle",
    "vwfpbquerytitle$CallbackState": "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"
}

page = 1
digits = len(str(page - 1))

callback_param = "c0:KV|777;['82781','77392','73876','27414','86034','86724','84572','74413','86693','74712','86197','86844','74646','86076','78745','541','24883','86596','85761','15616','10597','2794','7054','858','4882','16417','20820','78254','77144','76884','79591','79593','20312','20496','9505','14668','19864','12233','86794','86738','21635','27129','12234','12022','19001','17219','6838','6839','65534','81397','67433','22822','17750','23722','24352','24473','4768','4769','3992','8253','24020','78812','2418','2419','27518','84206','82214','86237','27493','68622','6856','1809','65412','65596','1810','81076','80976','24682','14692','15583','15582','16936','10250','21789','77646','20299','14754','25909','19773','67116','5254','3767','13161','16966','7559','75590','77856','6951','8646','67665'];{args};"
args = f'GB|{digits + 19};12|PAGERONCLICK{digits + 2}|PN{page - 1}'
data["__CALLBACKPARAM"] = callback_param.format(args=args)

url = 'https://apps.fpb.org.za/erms/fpbquerytitle.aspx'
response = requests.post(url, params=params, headers=headers, data=data)
print(response.text)

Другие вопросы по теме