我一直在使用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还不是很了解,但这是我迄今为止已经设法学到的这个网站的功能。
有人能指出我应该寻找的东西吗?我没有考虑标题的内容吗?
提前感谢您的帮助!