Python 实现模拟登录豆瓣、知乎等网站的步骤与注意事项
模拟登录豆瓣、知乎等网站的步骤与注意事项:
- 确认需要登录的网站是否提供了登录API,有些网站可能没有提供API,需要模拟浏览器操作模拟登录。
- 模拟登录需要提交表单或者发送post请求。需要注意提交的数据格式、编码方式、referer等信息,防止登录失败或者登录后被封禁。
- 涉及到登录状态的网站,一般是通过设置cookie或者session实现的。登录成功后需要保留登录状态,使用之前获取到的cookie或session来保持登录状态。
- 登录成功后,可以通过获取个人信息或者其他需要登录才能访问的API来验证是否登录成功,或者通过返回的页面内容或者API返回值来判断是否登录成功。
- 注意不要频繁、过于频繁地模拟登录,否则可能会被封禁IP或账号。
示例代码:
以豆瓣为例:
import requests from bs4 import BeautifulSoup # 构造headers信息,这里需要包含User-Agent和referer等信息 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36', 'Referer': 'https://www.douban.com/', } # 构造登录表单数据,需要使用urlencode编码 data = { 'source': 'None', 'redir': 'https://www.douban.com/', 'form_email': 'your_email', 'form_password': 'your_password', 'login': '登录' } data = urllib.parse.urlencode(data).encode('utf-8') # 发送post请求模拟登录 session = requests.Session() # 保留cookie/session等登录状态信息 response = session.post('https://accounts.douban.com/login', headers=headers, data=data) # 验证登录是否成功 soup = BeautifulSoup(response.content, 'html.parser') login_info = soup.find('span', {'class': 'mn'}) if login_info and '豆瓣' in login_info.text: print('登录成功!') else: print('登录失败!')
以知乎为例:
import requests import json import os # 构造headers信息,这里需要包含User-Agent和referer等信息 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36', 'Referer': 'https://www.zhihu.com/signin', } # 构造登录表单数据,需要使用urlencode编码 data = { 'username': 'your_email', 'password': 'your_password', 'remember_me': 'true' } data = json.dumps(data).encode('utf-8') # 发送post请求模拟登录 session = requests.Session() # 保留cookie/session等登录状态信息 response = session.post('https://www.zhihu.com/api/v3/oauth/sign_in', headers=headers, data=data) # 验证登录是否成功 response = session.get('https://www.zhihu.com/api/v3/account', headers=headers) if response.status_code == 200: account_info = json.loads(response.content.decode('utf-8')) print('登录成功,当前账号为:{0}'.format(account_info['name'])) else: print('登录失败!')
其中,知乎的API需要在开发者中心中注册并获取Access Token等认证信息,否则无法成功访问API。
相关文章