在具有python请求的网站上找出POST查询中发送的所有数据

时间:2016-10-31 14:04:55

标签: python post python-requests

我一直在使用python学习POST / GET查询,其中有一个从公共站点(在这种情况下是SEDI,加拿大内部人员注册表)中抓取数据的实际示例。这是使用python 3.5并请求2.11.1。

因此,在下一页上,可以输入公司内部人员姓名或其他信息:

https://www.sedi.ca/sedi/SVTSelectSediInsider?menukey=15.01.00&locale=en_CA&gx_session=0

打开此页面时,会向客户端发送两个包含以下内容的Cookie:

BIGipServerP_R1_sedi_443=rd1o00000000000000000000ffffac137017o443; path=/; domain=www.sedi.ca; Secure

JSESSIONID=0000RZjmIFv03gXCARzCPtvm2iC:188nefms0; path=/; domain=www.sedi.ca; Secure; HttpOnly

假设我已经知道内部人员编号,例如在这种情况下为RBIRCHA004。我创建了一个新会话:

mySession = requests.session()

并根据我在浏览器中使用网站时发送的内容填写所有表单字段:

payload = {
  "pageName" : "https://www.sedi.ca/sedi/com/sedi/jsp/insider/selectSediInsider.jsp",
  "menukey" : "15.01.00",
  "locale" : "en_CA",
  "jspSynchronizerToken" : "yS7BQBPbm7w3dJqhbi_mGk_1477920341973",
  "PUBLIC_SEARCH" : "setFlag",
  "INSIDER_STATE" : "1",
  "INSIDER_KEY" : "RBIRCHA004",
  "INSIDER_LNAME" : "",
  "INSIDER_FAMILY_NAME_SEARCH_TYPE" : "2",
  "INSIDER_FNAME" : "",
  "INSIDER_GIVEN_NAME_SEARCH_TYPE" : "2",
  "INS_CORP_NAME" : "",
  "INSIDER_COMPANY_NAME_SEARCH_TYPE" : "2",
  "ISSH_NIPDB" : "",
  "issuer_name" : "",
  "ISSUER_NAME_SEARCH_TYPE" : "2",
  "Search" : "Search"
}

我没有找到jspSynchroniserToken的值来自哪里。

我还浏览了源代码,以便找到可能对查询产生影响的js代码。有一些在/sedi/images/functions.js但只有一个函数用于验证表单并检查用户是否多次按下提交。

所以 - 当我使用url(https://www.sedi.ca/sedi/SVTSelectSediInsider?menukey=15.01.00&locale=en_CA)中的参数发送此查询并发布如下数据时:

mySession.request('POST', URL, data=payload)

我只回到相同的搜索页面 - 而不是包含结果的页面。

我尝试自动数据抓取的原因是我的大学学习需要数据,但手动获取数据非常繁琐,因此我尝试自动下载并存储在我的sqlite数据库中。

我对POST / GET和js还不是很了解,但这是我迄今为止已经设法学到的这个网站的功能。

有人能指出我应该寻找的东西吗?我没有考虑标题的内容吗?

提前感谢您的帮助!

0 个答案:

没有答案