python登陆网页
① python模拟登录知乎,为什么403 forbidden了
1. 找到正确的登录链接,应该是:self.baseUrl + '/login/email'
2. 这个request.Request(self.baseUrl + '/#signin', postdata.encode('utf-8'))没用过不清楚,所以不知道有没有带上前两个请求的cookies。我是改成:
self.opener.open(self.baseUrl + '/login/email', postdata.encode('utf-8'))这样访问的。
通常登录403问题都是:
1. 登录api不对,
2. 前后访问没有带cookies,导致token无效、验证码无效。
附上改后的,只会用requests的我,请勿喷啊~~~:
import cookielib,urllib2
import re,urllib,json
class ZhiHuSpider(object):
def __init__(self):
self.baseUrl = 'http://www.hu.com/'
self.captchaUrl = 'http://www.hu.com/captcha.gif?r='
self.cookies = cookielib.CookieJar()
self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cookies))
# 获取网页xsrf值
def getXsrf(self):
html = None
html = self.opener.open(self.baseUrl).read().decode('utf-8')
xsrf_match = re.search(r'name="_xsrf" value="(.*?)"/>', html)
if xsrf_match:
return xsrf_match.group(1).strip()
# 将验证码保存在本地
def getCaptchaCode(self):
data = self.opener.open(self.captchaUrl).read()
fName = self.captchaUrl.split('/')[3].split('?')[0]
f = open(fName, 'wb')
f.write(data)
f.close()
print(u'验证码已保存在本地!请查看!')
# 模拟登录知乎
def login(self):
form = { '_xsrf': self.getXsrf(),
'email': '[email protected]',
'password': 'password' }
self.getCaptchaCode()
code = input(u'请输入验证码:')
form['captcha'] = code
postdata = urllib.urlencode(form)#parse.urlencode(form)
op = self.opener.open(self.baseUrl + '/login/email', postdata.encode('utf-8'))
#req = request.Request(self.baseUrl + '/#signin', postdata.encode('utf-8'))
a = op.read().decode()
a=json.loads(a)
print a,type(a)
print a['msg']
if __name__ == '__main__':
spider = ZhiHuSpider()
spider.login()
② python中模拟登陆成功如何跳转到主页
参考这个可以了,http://www.bubuko.com/infodetail-699326.html
#以post的方法访问登陆页面,访问之后cookieJar会自定保存cookie
opener.open(login_page,data)
#以带cookie的方式访问页面,这样跳转主页就可以了
op=opener.open(url)
附上部分代码如下:
def login(self,login_url):
data = {
'email': self.email,
'password': self.passwd
}
post_data = urllib.urlencode(data)
req = urllib2.Request(login_url,post_data, self.headers)
response = self.opener.open(req)
content = response.read()
pagesoup = BeautifulSoup(content,fromEncoding = 'utf-8')
return pagesoup
def recent_visit(self,soup):
title = soup.html.head.title
print title.renderContents().strip()
app_link_url = soup.find('li',{'class':'app-nav-item app-homepage'}).a['href']
print app_link_url #人人网主页
app_link_op = self.opener.open(app_link_url)#跳转主页
app_link_soup = BeautifulSoup(app_link_op.read(),fromEncoding = 'utf-8')
③ 使用python是否能打开网页
可以啊,不仅可以打开,还可以将网页的内容爬取下来
下面这段代码就可以实现:
importurllib.request
#网址
url="http://www..com/"
#请求
request=urllib.request.Request(url)
#爬取结果
response=urllib.request.urlopen(request)
data=response.read()
#设置解码方式
data=data.decode('utf-8')
#打印结果
print(data)
#打印爬取网页的各类信息
print(type(response))
print(response.geturl())
print(response.info())
print(response.getcode())
它的运行结果如下:
你可以拷贝到自己的运行环境去试一试
④ python+selenium怎样循环登陆账号
楼主可以事先将账号和密码存储在一个字典中,也可以用pandas读取账号密码信息,为方便展示,我就将账号信息储存在一个字典中,具体的代码如下:
from selenium import webdriver
# 账号和密码信息
user_information = { "username1": "password1", "username2": "password2", "username3": "password3"}
# 使用循环遍历字典进行账号登录
for username, password in user_information.items():
# 创建WebDriver对象,可根据实际情况选择合适的浏览器驱动(如ChromeDriver)
driver = webdriver.Chrome()
# 访问登录页面
driver.get("https://example.com/login") # 替换为实际的URL
# 输入账号_name("username") 替换为实际的用户名输入框元素定位方式 username_input = driver.find_element_by_name("username") .send_keys(username)
password_input = driver.find_element_by_name("password") .send_keys(password)
# 替换为实际的提交按钮元素定位方式
submit_button.click()
# 在此添加其他操作或验证登录结果的代码
# 关闭浏览器窗口
driver.quit()
⑤ 如何用django做登录界面(2023年最新解答)
导读:本篇文章首席CTO笔记来给大家介绍有关如何用django做登录界面的相关内容,希望对大家有所帮助,一起来看看吧。
PythonDjango写登陆注册界面,怎么实现分教师端和学生端不同的注册登录网页链接
这个网页看下,学生和教师登陆这个就学要两个操作系统了,不过部分用相同的数据表,就是做一个出来,另一个就好写了。
django怎么写一个登录界面Djangoforms使用容易,又方便扩展,因此Djangoadmin和CBVs基本都基于forms使用.事实上,由于djangoforms的强大验证功能,大多数DjangoAPI框架都是用forms作为其验证的一部分.虽然djangoforms的学习需要花费一点时间,但如果将forms,mod
django如何在用户登录后返回到原来来页面,并保持登陆状态
任何页面的头部显示登录状态的部分应该是一个block,其他页面继承此block,这个block里面写上初始化js,从后台获取登录状态
pythondjango做了个web,在登录界面我想直接调用系统的login模板,可是每次登录成功之后就跳到系统的login.html里包含一个重定向URL的next隐藏域。有这么一行:
inputtype="hidden"name="next"value="{{next}}"/
登陆以后跳转到系统默认的/accounts/profile
你把value改成你想要跳转的url或者给next重新传一个url也行
结语:以上就是首席CTO笔记为大家介绍的关于如何用django做登录界面的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。
⑥ 如何用 Python 爬取需要登录的网站
最近我必须执行一项从一个需要登录的网站上爬取一些网页的操作。它没有我想象中那么简单,因此我决定为它写一个辅助教程。
在本教程中,我们将从我们的bitbucket账户中爬取一个项目列表。
教程中的代码可以从我的Github中找到。
我们将会按照以下步骤进行:
提取登录需要的详细信息
执行站点登录
爬取所需要的数据
在本教程中,我使用了以下包(可以在requirements.txt中找到):
Python
1
2
requests
lxml
步骤一:研究该网站
打开登录页面
进入以下页面 “bitbucket.org/account/signin”。你会看到如下图所示的页面(执行注销,以防你已经登录)
仔细研究那些我们需要提取的详细信息,以供登录之用
在这一部分,我们会创建一个字典来保存执行登录的详细信息:
1. 右击 “Username or email” 字段,选择“查看元素”。我们将使用 “name” 属性为 “username” 的输入框的值。“username”将会是 key 值,我们的用户名/电子邮箱就是对应的 value 值(在其他的网站上这些 key 值可能是 “email”,“ user_name”,“ login”,等等)。
2. 右击 “Password” 字段,选择“查看元素”。在脚本中我们需要使用 “name” 属性为 “password”的输入框的值。“password” 将是字典的 key 值,我们输入的密码将是对应的 value 值(在其他网站key值可能是 “userpassword”,“loginpassword”,“pwd”,等等)。
3. 在源代码页面中,查找一个名为 “csrfmiddlewaretoken” 的隐藏输入标签。“csrfmiddlewaretoken” 将是 key 值,而对应的 value 值将是这个隐藏的输入值(在其他网站上这个 value 值可能是一个名为 “csrftoken”,“authenticationtoken”的隐藏输入值)。列如:“”。
最后我们将会得到一个类似这样的字典:
Python
1
2
3
4
5
payload = {
"username": "<USER NAME>",
"password": "<PASSWORD>",
"csrfmiddlewaretoken": "<CSRF_TOKEN>"
}
请记住,这是这个网站的一个具体案例。虽然这个登录表单很简单,但其他网站可能需要我们检查浏览器的请求日志,并找到登录步骤中应该使用的相关的 key 值和 value 值。
步骤2:执行登录网站
对于这个脚本,我们只需要导入如下内容:
Python
1
2
import requests
from lxml import html
首先,我们要创建session对象。这个对象会允许我们保存所有的登录会话请求。
Python
1
session_requests = requests.session()
第二,我们要从该网页上提取在登录时所使用的 csrf 标记。在这个例子中,我们使用的是 lxml 和 xpath 来提取,我们也可以使用正则表达式或者其他的一些方法来提取这些数据。
Python
1
2
3
4
5
login_url = "n/?next=/"
result = session_requests.get(login_url)
tree = html.fromstring(result.text)
authenticity_token = list(set(tree.xpath("//input[@name='csrfmiddlewaretoken']/@value")))[0]
**更多关于xpath 和lxml的信息可以在这里找到。
接下来,我们要执行登录阶段。在这一阶段,我们发送一个 POST 请求给登录的 url。我们使用前面步骤中创建的 payload 作为 data 。也可以为该请求使用一个标题并在该标题中给这个相同的 url添加一个参照键。
Python
1
2
3
4
5
result = session_requests.post(
login_url,
data = payload,
headers = dict(referer=login_url)
)
步骤三:爬取内容
现在,我们已经登录成功了,我们将从bitbucket dashboard页面上执行真正的爬取操作。
Python
1
2
3
4
5
url = '/overview'
result = session_requests.get(
url,
headers = dict(referer = url)
)
为了测试以上内容,我们从 bitbucket dashboard 页面上爬取了项目列表。我们将再次使用 xpath 来查找目标元素,清除新行中的文本和空格并打印出结果。如果一切都运行 OK,输出结果应该是你 bitbucket 账户中的 buckets / project 列表。
Python
1
2
3
4
5
tree = html.fromstring(result.content)
bucket_elems = tree.findall(".//span[@class='repo-name']/")
bucket_names = [bucket.text_content.replace("n", "").strip() for bucket in bucket_elems]
print bucket_names
你也可以通过检查从每个请求返回的状态代码来验证这些请求结果。它不会总是能让你知道登录阶段是否是成功的,但是可以用来作为一个验证指标。
例如:
Python
1
2
result.ok # 会告诉我们最后一次请求是否成功
result.status_code # 会返回给我们最后一次请求的状态