发出request.post以使用BeautifulSoup访问子页面?

时间:2019-10-19 06:32:00

标签: python beautifulsoup

在Python上使用BeautifulSoup,我正在尝试抓取此页面的子页面

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>标记确定。

<input>中有12个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 个答案:

答案 0 :(得分:2)

在网络浏览器中,打开开发工具(您可以通过按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)