【发布时间】:2021-11-04 19:15:04
【问题描述】:
我正在尝试自动检索来自 this site 的数据。
我的代码是:
import requests
a_session = requests.Session()
a_session.get('https://www.kmcgov.in/KMCPortal/jsp/KMCBirthRecordSearch.jsp')
session_cookies = a_session.cookies
cookie = session_cookies.get_dict()
ablu = {
'FatherName': 'Cha',
'dateofBirth': '19/08/2004',
'MotherName': 'Cha',
}
referer = 'https://www.kmcgov.in/KMCPortal/jsp/KMCBirthRecordSearch.jsp'
url = 'https://www.kmcgov.in/KMCPortal/KMCBirthRegistrationAction.do?var=getVal'
r = requests.post(url, cookies=cookie, headers={"referer": referer}, data=ablu)
print(r.text)
命令行输出{failure:true,ERRORKEY:{"ERRORMESSAGE":"Please Contact your system administrator"}}
我想知道我做错了什么。这是我第一次尝试自动发送表单数据。
更新 1:
import requests
a_session = requests.Session()
a_session.get('https://www.kmcgov.in/KMCPortal/jsp/KMCBirthRecordSearch.jsp')
session_cookies = a_session.cookies
cookie = session_cookies.get_dict()
ablu = {
'FatherName': 'Cha',
'dateofBirth': '19/08/2004',
'MotherName': 'Cha',
}
referer = 'https://www.kmcgov.in/KMCPortal/jsp/KMCBirthRecordSearch.jsp'
url = 'https://www.kmcgov.in/KMCPortal/KMCBirthRegistrationAction.do?var=getVal'
r = a_session.post(url, cookies=cookie, headers={"Referer": referer, "Accept": '*/*',
"Accept-Encoding": 'gzip, deflate, br',
"Accept-Language": 'en-US,en;q=0.9,bn;q=0.8',
"Connection": 'keep-alive',
"Content-Length": '56',
"Content-Type": 'application/x-www-form-urlencoded; charset=UTF-8',
"DNT": '1',
"Host": 'www.kmcgov.in',
"Origin": 'https://www.kmcgov.in',
"sec-ch-ua": '"Google Chrome";v="95", "Chromium";v="95", ";Not A Brand";v="99"',
"sec-ch-ua-mobile": '?0',
"sec-ch-ua-platform": '"Windows"',
"Sec-Fetch-Dest": 'empty',
"Sec-Fetch-Mode": 'cors',
"Sec-Fetch-Site": 'same-origin',
"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36',
"X-Requested-With": 'XMLHttpRequest'}, data=ablu)
print(r.text)
【问题讨论】:
-
不要从其他浏览器硬编码会话 ID。会话 ID 过期。相反,在您的代码中访问该站点一次并保存您返回的会话 cookie。
-
@TimRoberts 做到了,谢谢。输出没有变化。如果你能看一看,我会很高兴的!
-
不知道。我什至在标题中添加了
User-Agent,但它仍然失败。他们可能会进行一些浏览器检测以防止自动读取。 -
您没有利用您在代码中初始化的会话。你应该使用
a_session.post而不是requests.post。我还建议您欺骗您的用户代理,否则很明显您是一个机器人。在您的浏览器中检查正在发送哪些标头和 cookie,并确保您产生可比较的结果。 -
复制的浏览器 POST 标头(参见更新 1 中的代码)但没有结果。
标签: python web-scraping python-requests