使用认证在Python中获取HTML代码

1 投票
1 回答
877 浏览
提问于 2025-04-18 08:50

我需要访问一个网页的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,所以你可以在登录后立即开始解析网页内容。

撰写回答