python爬虫---DAY5----模拟登录

python爬虫—DAY5----模拟登录

模拟登录:爬取基于某些用户的用户信息。

需求:对古诗文网进行模拟登录

分析

  1. 分析登录流程,观察登录时发送的请求和请求地址(post上面为请求地址)
    在这里插入图片描述
  2. 观察请求携带的参数(底部)
    在这里插入图片描述
  3. 除了验证码外,其他参数可以固定,验证码通过打码平台识别获取
  4. 在这里插入图片描述

编码流程

1、验证码识别,获取验证码图片的文字数据
2、对post请求进行发送(处理请求参数)
3、对响应数据进行持久化存储

补充

实例化一个session对象,可以保存cookie,代替手动添加cookie

代码

import requests
from lxml import  etree
from ChaoJiYin import Chaojiying_Client

#1. 封装识别验证码函数
def getCodeText(imgPath, codeType):
    chaojiying = Chaojiying_Client('1257965244', '123445', '919873')  # 用户中心>>软件ID 生成一个替换 96001
    im = open(imgPath, 'rb').read()  # 本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
    print(chaojiying.PostPic(im, codeType))
    return chaojiying.PostPic(im, codeType)

#2. 指定url
url='https://so.gushiwen.cn/user/login.aspx'

headers={
        "User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.67',
}

#3. 实例化一个session对象,代替requests发送请求
# session 发送请求可以捕获cookie
session=requests.Session()

#4. 发送请求,获取验证码图片
page_text=session.get(url=url,headers=headers).text

#5. 定位解析出验证码图片
tree=etree.HTML(page_text)
code_img_src='https://so.gushiwen.org'+tree.xpath('//*[@id="imgCode"]/@src')[0]
code_img=session.get(url=code_img_src,headers=headers).content
#6. 本地存储验证码
with open('./code.jpg' ,'wb') as fp:
    fp.write(code_img)

#7. 使用打码平台识别验证码
result=getCodeText("./code.jpg",1902)["pic_str"]

#8. 封装post请求参数表
data={
'__VIEWSTATE': 'H1kOgNOrVD1NjN3Ge0EVkVx2j0VCESjdSCZ+xpysVRuatfxlO0c1vMFhDNYz9cGKJmR075LTXg7FkSBG6T4Q7YnAXcYhe9M4YPHwW1FRz8ZslaybqkUWEBFBSvk=',
'__VIEWSTATEGENERATOR': 'C93BE1AE',
'from':' http://so.gushiwen.cn/user/collect.aspx',
'email': '19118415578', #填写自己的账号
'pwd': '1234567', #填写自己的密码
'code': result, # 验证码
'denglu': '登录',
}

#9. 指定登录url
login_url="https://so.gushiwen.cn/user/login.aspx?from=http%3a%2f%2fso.gushiwen.cn%2fuser%2fcollect.aspx"

#10. 发起post请求模拟登录
login_page_text=session.post(url=login_url,data=data,headers=headers).text

#11. 持久化存储
with open('./古诗.html', 'w', encoding='utf-8') as fp:
    fp.write(login_page_text)

如有错误,麻烦指正,感谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

传说中的懿痕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值