Делать запросы. Пост для доступа к подстранице с BeautifulSoup? - PullRequest
2 голосов
/ 19 октября 2019

Используя BeautifulSoup на Python, я пытаюсь почистить подстраницу этой страницы

https://www.mmorpg-stat.eu/0_fiche_alliance.php?pays=5&ftr=500208.all&univers=_146

Точнее говоря, подстраницу под названием ДРУГАЯ ИНФОРМАЦИЯ, кнопка которой имеет этот код

onclick="fcache12('faCacher');fcache13('ffond_gris');
    document.form1_2date.statview.value='2';
    document.forms['form1_2date'].submit();return false;"

, который вызывает методы fcache12() и fcache13(), а затем находит форму form1_2date и отправляет ее, используя значение value='2' (значения 0 и 1 для двух предыдущих кнопок)

<form name="form1_2date" method="post">

Проблема в том, что при нажатии на кнопку URL-адрес не изменяется, поэтому страница не может быть достигнута с помощью requests.get(), но вместо этого следует использовать requests.post().

import requests, urllib.request
from bs4 import BeautifulSoup

url = 'https://www.mmorpg-stat.eu/0_fiche_alliance.php?pays=5&ftr=500208.all&univers=_146'
input = {} # what to put here?
response = requests.post(url, data = input)

Я прочитал, что для имитации нажатия на кнопку мне нужно определить значения формы, которые должны быть переданы, и что они определяются всеми тегами <input> в форме.

Есть 12 <input> s внутри form1_2date

1 <input name="keyf" id="keyf" type="hidden">
2 <input type="checkbox" name="zoomgraph_box" id="zoomgraph_box">
3 <input type="checkbox" name="zoomgraph_box" id="zoomgraph_box">
4 <input name="Submit" type="button" onclick="fcache12('faCacher');fcache13('ffond_gris');document.getElementById('menu_live_a').style.display='none';
document.form1_info3.zoomgraph.value=document.getElementsByName('zoomgraph_box')[0].checked;document.form1_info3.choixflash.value=document.getElementsByName('zoomgraph_box')[1].checked;
document.forms['form1_info3'].submit();return false;" style="font:9pt Arial, Helvetica, sans-serif;border: thin solid #666666; cursor:pointer; background:#EA6C11; color: #ffffff;-moz-border-radius: 10px;-webkit-border-radius: 10px;border-radius: 6px 6px 6px 6px; " value="Apply">
5 <input name="Submit2" type="button" onclick="document.getElementById('menu_live_a').style.display='none';" style="font:9pt Arial, Helvetica, sans-serif;border: thin solid #666666; cursor:pointer;background:#EA6C11; color: #ffffff;-moz-border-radius: 10px;-webkit-border-radius: 10px;border-radius: 6px 6px 6px 6px; " value="Cancel">
6 <input name="date_1" type="text" class="case_ss1 hasDatepicker" id="datepickera" value="13-10-2019" size="10" maxlength="10">
7 <input name="date_2" type="text" class="case_ss1 hasDatepicker" id="datepicker" value="19-10-2019" size="10" maxlength="10">
8 <input name="plot_1" type="hidden" id="plot_1">
9 <input name="Submit" type="button" onclick="fcache12('faCacher');fcache13('ffond_gris');document.getElementById('cache_date_j_div').style.display='none';document.form1_2date.plot_1.value='6';document.form1_2date.keyf.value='';document.forms['form1_2date'].submit();return false;" style="font:9pt Arial, Helvetica, sans-serif;border: thin solid #666666; cursor:pointer; background:#EA6C11; color: #ffffff;-moz-border-radius: 10px;-webkit-border-radius: 10px;border-radius: 6px 6px 6px 6px; " value="Apply">
10 <input name="Submit2" type="button" onclick="document.getElementById('cache_date_j_div').style.display='none';" style="font:9pt Arial, Helvetica, sans-serif;border: thin solid #666666; cursor:pointer; background:#EA6C11; color: #ffffff;-moz-border-radius: 10px;-webkit-border-radius: 10px;border-radius: 6px 6px 6px 6px; " value="Cancel">
11 <input name="statview" type="hidden" id="statview" value="">
12 <input name="statview_bis" type="hidden" id="statview_bis" value="">

Я читал, что словарь должен быть написан в виде {'key1': value1, 'key2': value2, ...}, но я не понимаю, как его скомпилировать.

1 Ответ

2 голосов
/ 19 октября 2019

В вашем веб-браузере откройте инструменты разработчика (вы можете сделать это, нажав F12)

Затем откройте вкладку network, там вы увидите все запросы вашего браузера.

Теперь нажмите кнопку Other information на веб-странице. Итак, в инструментах разработчика вы увидите несколько запросов, один из которых вам нужен:

Dev tools screenshot

Когда вы выбираетеэто, он открывает детали запроса на правой боковой панели.

Таким образом, чтобы ваш запрос работал, вы должны подражать этому;на скриншоте показана вкладка Params, которая, вероятно, самая важная, но есть также файлы cookie, которые вам нужно получить (вы можете использовать requests.Session для PHPSESSID)

Это работает:

import requests

response = requests.post(
        'https://www.mmorpg-stat.eu/0_fiche_alliance.php?pays=5&ftr=500208.all&univers=_146',
        data = {
            'date_1': '01-10-2019',
            'date_2': '19-10-2019',
            'statview': 2,
        }
    )

print(response.text)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...