我正在尝试从需要登录身份验证的站点上批量下载一系列PDF。但是,当我尝试对'/ transcripts / transcript.pdf?user_id = 3007'的GET请求时,我能够成功登录,但是,该请求返回了'/ transcripts的内容/transcript.pdf'。
有人知道为什么URL参数没有发送吗?还是为什么要重新路由?
我尝试将参数'user_id'作为数据,参数传递并硬编码在URL中。
with requests.Session() as s:
login = s.get('<domain>/login/canvas')
# print the html returned or something more intelligent to see if it's a successful login page.
print(login.text)
login_html = lxml.html.fromstring(login.text)
hidden_inputs = login_html.xpath(r'//form//input[@type="hidden"]')
form = {x.attrib["name"]: x.attrib["value"] for x in hidden_inputs}
print("form: ",form)
form['pseudonym_session[unique_id]']= username
form['pseudonym_session[password]']= password
response = s.post('<domain>/login/canvas',data=form)
print(response.url, response.status_code) # gets <domain>?login_success=1 200
# An authorised request.
data = { 'user_id':'3007'}
r = s.get('<domain>/transcripts/transcript.pdf?user_id=3007', data=data)
print(r.url) # gets <domain>/transcripts/transcript.pdf
print(r.status_code) # gets 200
with open('test.pdf', 'wb') as f:
f.write(r.content)
GET响应返回 /transcripts/transcript.pdf 而不是 /transcripts/transcript.pdf?user_id=3007
答案 0 :(得分:0)
从外观上看,您正在尝试使用画布。我很确定在画布上,您可以批量下载所有测试附件。
如果不是这种情况,可以尝试以下方法:
如果不是,则GET可能还不够;也许该网站使用了javascript等。
答案 1 :(得分:0)
如果有人对此解决方案或我可以阅读的任何资源有更优雅的解决方案,我将不胜感激!