模拟登录
为什么要进行模拟登录 - 有时候我们要进行登录之后,才能爬取到的数据 为什么要识别验证码 - 验证码往往是作为登录中发送的请求参数进行使用的 验证码识别: 借助于一些线上打码平台(超级鹰,云打码,打码兔) 超级鹰的使用流程: - 注册:注册一个<用户中心>身份的账号 - 登录:基于<用户中心>进行登录 - 点击 软件ID -->生成一个软件id - 下载示例代码:点击开发文档->选择python语言->点击下载 代理操作 cookle操作 线程池
实例:(这里使用的是超级鹰的打码平台)
import requests from lxml import etree headers = { ‘User-Agent‘:‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36‘ } import requests from hashlib import md5 class Chaojiying_Client(object): def __init__(self, username, password, soft_id): self.username = username password = password.encode(‘utf8‘) 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() def get_codeImg_text(imgPath,imgType): chaojiying = Chaojiying_Client(‘zty1304368100‘, ‘zty130436‘, ‘899993‘) #用户中心>>软件ID 生成一个替换 96001 im = open(imgPath, ‘rb‘).read()#本地图片文件路径 来替换 a.jpg 有时WIN系统须要// return chaojiying.PostPic(im, imgType)[‘pic_str‘] session=requests.Session() url=‘https://so.gushiwen.org/user/login.aspx?from=http://so.gushiwen.org/user/collect.aspx‘ page_text=session.get(url=url,headers=headers).text tree=etree.HTML(page_text) img_src=‘https://so.gushiwen.org‘+tree.xpath(‘//img[@id="imgCode"]/@src‘)[0] img_info=session.get(url=img_src,headers=headers).content with open(‘./code.jpg‘,‘wb‘) as fp: fp.write(img_info) #识别二维码 code_img_text=get_codeImg_text(‘./code.jpg‘,1902) print(code_img_text) __VIEWSTATE=tree.xpath(‘//input[@id="__VIEWSTATE"]/@value‘)[0] __VIEWSTATEGENERATOR=tree.xpath(‘//input[@id="__VIEWSTATEGENERATOR"]/@value‘)[0] login_url=‘https://so.gushiwen.org/user/login.aspx?from=http%3a%2f%2fso.gushiwen.org%2fuser%2fcollect.aspx‘ data={ ‘__VIEWSTATE‘:__VIEWSTATE , ‘__VIEWSTATEGENERATOR‘: __VIEWSTATEGENERATOR, ‘from‘: ‘http://so.gushiwen.org/user/collect.aspx‘, ‘email‘: ‘[email protected]‘, ‘pwd‘: ‘bobo328410948‘, ‘code‘: code_img_text, ‘denglu‘: ‘登录‘, } page_info=session.post(url=login_url,data=data,headers=headers).text with open(‘./gsw.html‘,‘w‘,encoding=‘utf-8‘) as f: f.write(page_info)
技术点:
如何使用超级鹰的打码平台 如何获取验证码的图片?如何使用超级鹰将验证码图片识别成字符串的形式 标签定位,数据提取 处理动态参数 传送数据时传送cookie值 session=requests.Session()
原文地址:https://www.cnblogs.com/zty1304368100/p/11019291.html
时间: 2024-10-13 08:15:13