使用认证在Python中获取HTML代码
我需要访问一个网页的HTML源代码
但是这个网页需要登录认证,我该如何用Python输入我的用户名和密码来获取它呢?
问题是,比如说如果我这样做:
import requests
url='http://cuherp.chalkpad.in//Interface/index.php'
url_in='http://cuherp.chalkpad.in//Interface/Student/scIndex.php'
u='b1300*****'
p='jang******'
params={'Username':u,
'Password':p,
'Institute':'CSOET',
'Session':'2013-14'}
resp_1=requests.get(url,auth=(u,p))
resp_2=requests.get(url_in,auth=(u,p),cookies=resp_1.cookies)
这里的“url”是登录页面,而“url_in”是我需要获取HTML代码的页面。
但是运行后,“url_in.url”返回的还是“url”,也就是登录页面,这意味着我还没有成功登录。请帮帮我。
1 个回答
0
我觉得一个非常方便的方法是使用selenium webdriver来远程控制你的浏览器来完成这个任务。有些人可能会觉得用一个完整的测试框架来做这个事情有点过头,但其实用起来就像这里展示的那样简单:如何使用selenium和python进行HTTP认证
如果你更喜欢使用requests库,你可以试试Robobrowser,这是一个基于requests的新框架,它集成了mechanize来填写表单(这里有一个文档中的例子):
from robobrowser import RoboBrowser
browser = RoboBrowser()
browser.open('http://twitter.com')
# Get the signup form
signup_form = browser.get_form(class_='signup')
signup_form # <RoboForm user[name]=, user[email]=, ...
# Inspect its values
signup_form['authenticity_token'].value # 6d03597 ...
# Fill it out
signup_form['user[name]'].value = 'python-robot'
signup_form['user[user_password]'].value = 'secret'
# Serialize it to JSON
signup_form.serialize() # {'data': {'authenticity_token': '6d03597...',
# 'context': '',
# 'user[email]': '',
# 'user[name]': 'python-robot',
# 'user[user_password]': ''}}
# And submit
browser.submit_form(signup_form)
Robobrowser中还包含了Beautiful Soup,所以你可以在登录后立即开始解析网页内容。