Python爬虫——requests_cookie登陆古诗文网

news/2025/2/14 5:45:13/
  1. 寻找登陆需要的参数
__VIEWSTATE:aiMG0UXAfCzak10C7436ZC/RXoZbM2lDlX1iU/4wjjdUNsW8QU+s6W2/3M6XIKagQZrC7ooD8Upj8u+CnpQ+MXjDAp6fS/NM2nGhnKO0KOSXfT3jGHhJAOBouMI3Qnlp+JCQKPXfVDJPYwh169MGLFC6trY=
__VIEWSTATEGENERATOR: C93BE1AE
from: http://so.gushiwen.cn/user/collect.aspx
email: 账号
pwd: 密码
code: 验证码
denglu: 登录
其中__VIEWSTATE,__VIEWSTATEGENERATOR和code是一个可以变化的量
  1. 获取页面源码
import requests# 登陆界面的url地址
url = 'https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx'headers = {'User-Agent': ''
}# 获取页面源码
response = requests.get(url, headers=headers)
content = response.text
  1. 解析网页源码,获取__VIEWSTATE和__VIEWSTATEGENERATOR的值
# 解析网页源码    获取__VIEWSTATE和__VIEWSTATEGENERATOR
soup = BeautifulSoup(content, 'lxml')# 获取__VIEWSTATE
viewstate = soup.select('#__VIEWSTATE')[0].attrs.get('value')# 获取__VIEWSTATEGENERATOR
viewstategenerator = soup.select('#__VIEWSTATEGENERATOR')[0].attrs.get('value')
  1. 获取验证码,这里使用的是session()方法
# 获取验证码图片
code_url = soup.select('#imgCode')[0].attrs.get('src')
code_url = 'https://so.gushiwen.cn' + code_url# session()方法 通过session的返回值,就能使请求变成一个对象
session = requests.session()
# 验证码url的内容
response_code = session.get(code_url)
# 这里要使用二进制数据,因为是要下载图片
content_post = response_code.content
# wb是将二进制数据写入到文件
with open('files/code.jpg', 'wb')as fp:fp.write(content_post)code = input('输入验证码:')
  1. 登陆
# 登陆
data_post = {'__VIEWSTATE': viewstate,'__VIEWSTATEGENERATOR': viewstategenerator,'from': 'http://so.gushiwen.cn/user/collect.aspx','email': 账号,'pwd': 密码,'code': code,'denglu': '登录'
}response_post = session.post(url, data=data_post, headers=headers)
content_post = response_post.text
# 保存到本地
with open('files/gushiwen.html', 'w', encoding='utf-8')as fp:fp.write(content_post)

完整代码

import requests
from bs4 import BeautifulSoup
import chaojiying# 目标:通过登陆,进入到主界面# 登陆需要的参数
# __VIEWSTATE: aiMG0UXAfCzak10C7436ZC/RXoZbM2lDlX1iU/4wjjdUNsW8QU+s6W2/3M6XIKagQZrC7ooD8Upj8u+CnpQ+MXjDAp6fS/NM2nGhnKO0KOSXfT3jGHhJAOBouMI3Qnlp+JCQKPXfVDJPYwh169MGLFC6trY=
# __VIEWSTATEGENERATOR: C93BE1AE
# from: http://so.gushiwen.cn/user/collect.aspx
# email: 508785507@qq.com
# pwd: 20030904am
# code: e3lk
# denglu: 登录
# 其中__VIEWSTATE,__VIEWSTATEGENERATOR和code是一个可以变化的量# 登陆界面的url地址
url = 'https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx'headers = {'User-Agent': ''
}# 获取页面源码
response = requests.get(url, headers=headers)
content = response.text# 解析网页源码    获取__VIEWSTATE和__VIEWSTATEGENERATOR
soup = BeautifulSoup(content, 'lxml')# 获取__VIEWSTATE
viewstate = soup.select('#__VIEWSTATE')[0].attrs.get('value')# 获取__VIEWSTATEGENERATOR
viewstategenerator = soup.select('#__VIEWSTATEGENERATOR')[0].attrs.get('value')# 获取验证码图片
code_url = soup.select('#imgCode')[0].attrs.get('src')
code_url = 'https://so.gushiwen.cn' + code_url# 使用session()方法 通过session的返回值,就能使请求变成一个对象
session = requests.session()
# 验证码url的内容
response_code = session.get(code_url)
# 这里要使用二进制数据,因为是要下载图片
content_post = response_code.content
# wb是将二进制数据写入到文件
with open('files/code.jpg', 'wb')as fp:fp.write(content_post)code = input('输入验证码:')# 登陆
data_post = {'__VIEWSTATE': viewstate,'__VIEWSTATEGENERATOR': viewstategenerator,'from': 'http://so.gushiwen.cn/user/collect.aspx','email': '','pwd': '','code': code,'denglu': '登录'
}response_post = session.post(url, data=data_post, headers=headers)
content_post = response_post.text
# 保存到本地
with open('files/gushiwen.html', 'w', encoding='utf-8')as fp:fp.write(content_post)

不过这种方法需要手动输入验证码,太麻烦,还有一个可以花点小钱来解决这个问题的方法,那就是使用自动识别验证码的平台,这里用的是超级鹰https://www.chaojiying.com/

  1. 先注册一个账号
  2. 进入用户中心,购买积分(1块钱有1000点,学习使用完全是够了)
  3. 点击开发文档找到python语言下载,点击下载
    在这里插入图片描述
  4. 下载完成后解压,放到程序文件夹目录下
  5. 生成软件ID
    在这里插入图片描述
  6. 把这里替换成自己的账号和密码,最后一个是上一步生成的软件ID,也要替换掉(如果是python3.4以上的版本,print需要加())
    在这里插入图片描述
  7. 替换
code = input('输入验证码:')

替换为

# 超级鹰识别验证码内容
chaojiying = Chaojiying_Client('账号', '密码', '软件ID')
img = open('files/code.jpg', 'rb').read()
code = chaojiying.PostPic(img, 1902).get('pic_str')

http://www.ppmy.cn/news/1026694.html

相关文章

华为OD面试(部分)

笔试与性格测验 一面 问题和算法题都挺简单的 二面 Java内存泄漏 算法题思路不对,没写完只说了下思路:Leetcode516. Longest Palindromic Subsequence hr面(资面) 最后告诉我hr面挂了。其实这不是最重要的,因为还…

buuctf crypto刷题1

目录 (1) 凯撒?替换?呵呵!(替换密码爆破) (2) RSA1(dp泄露) (3) RSA2(dp泄露大整数分解) (4) RSA3(共模攻击) (5) 还原大师(md5爆破) (6) RSA(公钥文件解析) (7) RsaRoll (8) Dangerous RSA(小明文攻击) (9) [GUET-CTF2019]BabyRSA (10) [BJD…

Java并发编程(四)线程同步 中 [AQS/Lock]

概述 Java中可以通过加锁,来保证多个线程访问某一个公共资源时,资源的访问安全性。Java提出了两种方式来加锁 第一种是我们上文提到的通过关键字synchronized加锁,synchronized底层托管给JVM执行的,并且在java 1.6 以后做了很多…

ssm亚盛汽车配件销售业绩管理统源码和论文PPT

ssm亚盛汽车配件销售业绩管理统源码和论文PPT007 开发工具:idea 数据库mysql5.7(mysql5.7最佳) 数据库链接工具:navcat,小海豚等 开发技术:java ssm tomcat8.5 研究的意义 汽车配件销售类企业近年来得到长足发展,在市场份额不断扩大同时…

《系统架构设计师教程》重点章节思维导图

内容来自《系统架构设计师教程》,筛选系统架构设计师考试中分值重点分布的章节,根据章节的内容整理出相关思维导图。 重点章节 第2章:计算机系统知识第5章:软件工程基础知识第7章:系统架构设计基础知识第8章&#xff1…

IDEA远程调试

1.打开Idea的Run/Debug Configurations, 新增一个Remote jvm参数添加 -agentlib:jdwptransportdt_socket,server-y,suspendn,address5005 2.远程项目启动添加参数 java -agentlib:jdwptransportdt_socket,servery,suspendn,address5005 -jar xxx.jar 3. idea启动remote&#…

无涯教程-Perl - qq函数

描述 可以使用此函数代替双引号。这实际上不是一个函数,更像是一个运算符,但是如果您在其他程序员的程序中看到它却不记得它是什么,那么可能会在这里看。实际上,您可以使用任何一组定界符,而不仅仅是括号。 语法 以下是此函数的简单语法- qq ( string )返回值 该函数返回双…

EVE-NG 镜像导入

目录 1.文件构成 2.导入锐捷镜像 2.1 上传模板 2.2 上传图标 2.3上传启动镜像 2.4上传配置脚本 2.5 修复文件权限 2.6 查看​ 1.文件构成 eve-ng 镜像由4个文件构成 1.启动镜像:运行时加载的磁盘镜像文件; 2.图标:在拓扑中显示的图…