我正试图通过一个大学代理下载一篇研究文章pdf,我需要登录该代理。我试着遵循[这个答案][1],但结果下载只包含登录网站
文章url可能如下所示:https://iopscience.iop.org/article/10.3847/2041-8213/aaf743/pdf
。(这一个恰好是开放访问,但其他的则需要以这种方式访问)
在浏览器中,我通过代理来访问它:https://login.emedien.ub.my-university.edu/login?qurl=https%3a%2f%2fiopscience.iop.org%2farticle%2f10.3847%2f2041-8213%2faaf743%2fpdf
。此url存储在下面代码示例中的变量long_proxy
中
在浏览器中,这将显示一个登录表单:
<form action="/login" method="post">
<input name="ezproxycsrftoken" type="hidden" value="aBcDeFgH12345"/>
<input name="url" type="hidden" value="https://iopscience.iop.org/article/10.3847/2041-8213/aaf743/pdf">
<table>
<tr><td>University Username:</td><td><input name="user" style="width:250px" tabindex="1" type="text"/></td></tr>
<tr><td>Password:</td><td><input name="pass" style="width:250px" tabindex="2" type="password"/></td></tr>
</table>
</input>
</form>
输入用户名/密码后,我会被转发到
https://iopscience-iop-org.emedien.ub.uni-muenchen.de/article/10.3847/2041-8213/aaf743/pdf
这将在浏览器中显示PDF。在下面的代码示例中,我将此url称为short_proxy
我尝试通过以下方式处理python请求:
user_name = 'myname'
passwd = 'mypassword'
with requests.Session() as session:
session.headers.update({'User-Agent': 'Mozilla/5.0'})
# Parse the input form for the hidden input
r2 = requests.get(long_proxy)
soup = bs4.BeautifulSoup(r2.text, "html.parser")
form = soup.find('form')
hidden = form.find('input', attrs={'type':'hidden', 'name':'ezproxycsrftoken'}).attrs['value']
url_res = form.find('input', attrs={'type':'hidden', 'name':'url'}).attrs['value']
# set up the login
payload = {
'user': user_name,
'pass': passwd,
'ezproxycsrftoken': hidden,
'url': url_res
}
# post login
post = session.post(login, data=payload)
# get data
r3 = session.get(short_proxy)
with open('file.pdf', 'wb') as fid:
fid.write(r3.content)
你知道如何获取PDF吗
[1]: https://stackoverflow.com/questions/37816565/python-authentication-with-requests-library-via-post
您使用
requests.Session()
来保存网站提供给您的cookie/会话,但您在获取longproxy
的初始请求中使用requests.get()
而不是session.get()
。 换衣服到
应该解决你的问题。但是,我无法验证这一点。
还请注意,您的long_代理
是简单的登录url,后跟pdf url。因此,您实际上不必获取它。
这可以为您节省一些额外的请求/执行时间
相关问题 更多 >
编程相关推荐