爬虫_request_cookie登录(隐藏域和验证码)

复制代码
#通过登录然后进入到主页面

# 通过找登录接口我们发现登录的时候需要的参数很多
# __VIEWSTATE: Q9zeukk7PE5h9KCMT1uBtHMfNp6+Kfkwk5KywR928SJ/NJwdBGx04xq662yh/fA3/UuhXe7hlF0C19KQ3PHIFzj37k4o/UHDvS7o/9a9hYtuGlQcQDUlyasgnsk=
# __VIEWSTATEGENERATOR: C93BE1AE
# from: http://so.gushiwen.cn/user/collect.aspx
# email: 360532178@qq.com
# pwd: ********
# code: f8ko
# denglu: 登录
# __VIEWSTATE、__VIEWSTATEGENERATOR、code 是一个可以变化的量
# 难点:
# (1)__VIEWSTATE、__VIEWSTATEGENERATOR 一般情况看不到的数据都是在页面的源码中
# 我们观察到这两个数据在页面的源码中,所以我们需要获取页面的源码,然后进行解析就可以获取了
# (2)验证码

import requests
# 这是登录界面的url地址
url = 'https://so.gushiwen.cn/user/login.aspx?from=http%3a%2f%2fso.gushiwen.cn%2fuser%2fcollect.aspx'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36'
}
# 获取页面的源码
response = requests.get(url=url,headers=headers)
content = response.text

# 解析页面源码 获取__VIEWSTATE、__VIEWSTATEGENERATOR 的值
from bs4 import BeautifulSoup
soup = BeautifulSoup(content,'lxml')
# print(soup)
# 获取__VIEWSTATE值
viewstate = soup.select('#__VIEWSTATE')[0].attrs.get('value')

# 获取__VIEWSTATEGENERATOR值
viewstategenerator = soup.select('#__VIEWSTATEGENERATOR')[0].attrs.get('value')

# print('viewstate>>',viewstate)
# print('viewstategenerator>>',viewstategenerator)
# 获取验证码图片
code = soup.select('#imgCode')[0].attrs.get('src')
code_url = 'https://so.gushiwen.cn'+code
# print('code_url>>',code_url)

#****有坑!!!!
# import urllib.request
# 下载图片
# urllib.request.urlretrieve(url=code_url,filename='code.jpg')

# 利用session将两次请求地址变成一样的
session = requests.session()
# 验证码的url的内容
response_code = session.get(code_url)
# 注意此时要使用二进制数据,因为我们要使用的图片的下载
content_code = response_code.content
# wb的模式就是将二进制数据写入到文件
with open('code.jpg','wb')as fp:
     fp.write(content_code)

# 获取了验证码的图片后,下载到本地然后观察验证码,观察之后然后在控制台输入这个验证码就可以将这个值给
# code的参数,就可以登录
code_name = input('请输入你的验证码')
# 点击登录

data_post = {
    '__VIEWSTATE': viewstate,
    '__VIEWSTATEGENERATOR': viewstategenerator,
    'from': 'http://so.gushiwen.cn/user/collect.aspx',
    'email': '360532178@qq.com',
    'pwd': '自己的密码',
    'code': code_name,
    'denglu': '登录'
}
response_post = session.post(url=url,headers=headers,data=data_post)
content_post = response_post.text
with open('gushiwen.html','w',encoding='utf-8')as fp:
    fp.write(content_post)
复制代码

运行结果

 

输入验证码后跳过登录

 可以利用“超级鹰验证码”获取验证码内容

http://www.chaojiying.com/

posted @   创客未来  阅读(204)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2021-05-27 JS 动态设置radio赋值和取值
2021-05-27 Golang 数组的使用
点击右上角即可分享
微信分享提示