在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, ...}
的形式编写,但是我不知道如何编译它。
答案 0 :(得分:2)
在网络浏览器中,打开开发工具(您可以通过按F12
来实现)
然后打开network
标签,您将在其中看到浏览器发出的每个请求。
现在,单击网页上的Other information
按钮。因此,在开发工具中,您将看到正在发出一些请求,您需要的是以下请求:
选择后,它会在右侧面板上打开请求的详细信息。
因此,为了使您的请求生效,您必须模仿这一点;屏幕快照上显示了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)