El módulo de solicitudes realiza un inicio de sesión simulado en Renren

El código de hoy es un inicio de sesión simulado a Renren

  • Después de hacer clic en el botón de inicio de sesión, se iniciará una solicitud POST
  • La solicitud POST llevará la información de inicio de sesión ingresada antes de iniciar sesión (nombre de usuario, contraseña, código de verificación ...)
  • Características del código de verificación: cambios dinámicos cada vez
  • imprimir (response.status_code), verifique el código de estado correspondiente, si es 200, el inicio de sesión de simulación es exitoso
  • Si hay un error, debe ser un error en la url y los parámetros transportados

El segundo problema es que cuando visitamos directamente el centro personal del usuario, encontraremos que la página posterior a la visita es una página de inicio de sesión, pero no podemos acceder directamente a los datos de la página de inicio personal. Las razones son las siguientes:
-Cuando se inicia la segunda vez en base a la solicitud de la página de inicio personal, el servidor El final no sabe que la solicitud se basa en una solicitud en el estado de inicio de sesión.

Se utilizarán cookies en este momento.

  • Cookie: La función esencial es permitir que el servidor registre el estado del cliente.
    • Procesamiento manual: obtenga su valor a través de la herramienta de captura de paquetes y encapsúlelo en encabezados. (No muy versátil)
    • Procesamiento automático:
      • ¿Dónde está la fuente del valor de las cookies?
        • Creado por el servidor después de la solicitud POST de inicio de sesión simulada.
      • objeto de sesión:
        • Rol: 1. Puede enviar la solicitud.
          2. Si se genera una cookie durante la solicitud, la cookie se almacenará / transportará automáticamente en el objeto de sesión.

Método de operación de cookies:
1. Crear un objeto de sesión: sesión = solicitudes.Sesión ()
2. Usar el objeto de sesión para enviar una solicitud POST de inicio de sesión simulada (las cookies se almacenarán en la sesión)
3. La solicitud de obtención del objeto de sesión para la página de inicio personal Enviar (llevar cookies)

Subir código

import  requests
from lxml import etree
from hashlib import md5
#超级鹰示例代码
class Chaojiying_Client(object):

    def __init__(self, username, password, soft_id):
        self.username = username
        password =  password.encode('utf-8')
        self.password = md5(password).hexdigest()
        self.soft_id = soft_id
        self.base_params = {
    
    
            'user': self.username,
            'pass2': self.password,
            'softid': self.soft_id,
        }
        self.headers = {
    
    
            'Connection': 'Keep-Alive',
            'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',
        }

    def PostPic(self, im, codetype):
        """
        im: 图片字节
        codetype: 题目类型 参考 http://www.chaojiying.com/price.html
        """
        params = {
    
    
            'codetype': codetype,
        }
        params.update(self.base_params)
        files = {
    
    'userfile': ('ccc.jpg', im)}
        r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, files=files, headers=self.headers)
        return r.json()

    def ReportError(self, im_id):
        """
        im_id:报错题目的图片ID
        """
        params = {
    
    
            'id': im_id,
        }
        params.update(self.base_params)
        r = requests.post('http://upload.chaojiying.net/Upload/ReportError.php', data=params, headers=self.headers)
        return r.json()
#创建Session对象
session = requests.Session()
#获取数据
headers = {
    
    
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3947.100 Safari/537.36'
    }
url = 'http://www.renren.com/SysHome.do'
page_text = requests.get(url=url,headers=headers).text
#实例化解析数据,获取相应的验证码图片
tree = etree.HTML(page_text)
code_img_src = tree.xpath('//*[@id="verifyPic_login"]/@src')[0]
code_img_data= requests.get(url=code_img_src,headers=headers).content
with open('./codedata.jpg','wb') as fp:
    fp.write(code_img_data)
#使用超级鹰的示例代码对验证码进行识别
if __name__ == '__main__':
	chaojiying = Chaojiying_Client('a1372431588', '970110yy', '905384')	#用户中心>>软件ID 生成一个替换 96001
	im = open('codedata.jpg', 'rb').read()													#本地图片文件路径 来替换 a.jpg
	a =chaojiying.PostPic(im, 1902)
	print(a)
#post请求的发送(模拟登陆)
login_url = 'http://www.renren.com/ajaxLogin/login?1=1&uniqueTimestamp=20204110256'
data = {
    
    
    'email': '18234504765',
    'icode': a,
    'origURL':'http://www.renren.com/home',
    'domain': 'renren.com',
    'key_id': '1',
    'captcha_type': 'web_login',
    'password': '97ea2d9e82a391b42e834975b7a8d552db313437c3646e6b473fe5ab845e858e',
    'rkey': '3f674e5c4940658971a514b5bdb19571',
    'f': 'http%3A%2F%2Fwww.renren.com%2F974497470',
}
#利用下述可以查看响应状态码,如果是200,说明模拟登陆成功,查看状态码是一种通用方式
#使用session进行post请求的发送
response =session.post(url=login_url,headers=headers,data=data)
print(response.status_code)
#爬取当前用户个人主页对应的页面数据
detail_url = 'http://www.renren.com/974497470/profile'
detail_page_text = session.get(url=detail_url,headers=headers).text
with open('yonghu.html','w',encoding='utf-8')  as fp:
    fp.write(detail_page_text)

Hay comentarios detallados en el código.
El código de estado del resultado de la operación es 200 y el inicio de sesión simulado es exitoso.

Supongo que te gusta

Origin blog.csdn.net/qwerty1372431588/article/details/106329024
Recomendado
Clasificación