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

  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.mzph.cn/news/35121.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 命令--查看网络端口命令

使用 netstat 检查端口 netstat 是一个命令行工具,可以提供有关网络连接的信息。 netstat - atulnp会显示所有端口和所有对应的程序,用grep管道可以过滤出想要的字段 -a :all,表示列出所有的连接,服务监听&#xff…

Android JNI开发从0到1,java调C,C调Java,保姆级教程详解

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂,风趣幽默",感觉非常有意思,忍不住分享一下给大家。 👉点击跳转到教程 第一步首先配置Android studio的NDK开发环境,首先在Android studio中下载NDK…

如何防止CSRF攻击

背景 随着互联网的高速发展,信息安全问题已经成为企业最为关注的焦点之一,而前端又是引发企业安全问题的高危据点。在移动互联网时代,前端人员除了传统的 XSS、CSRF 等安全问题之外,又时常遭遇网络劫持、非法调用 Hybrid API 等新…

Java超级玛丽小游戏制作过程讲解 第六天 创建背景类

package com.sxt;import java.awt.image.BufferedImage;public class BackGround {//当前场景要显示的图像 private BufferedImage bgImagenull;//记录当前是第几个场景 private int sort;//判断是否是最后一个场景 private boolean flag;public BackGround(){}public BackGrou…

【CGroupAndroid实践篇】四、Native Service进程启动及控制组迁移

写在前面 承接上一篇,在cgroup子系统初始化完成后,init会继续执行开机流程,且通过代哦用ExecuteCommand()函数。 /system/core/init/init.cppint SecondStageMain(int argc, char** argv) {......ActionManager& am = ActionManager::GetInstance();am.ExecuteOneCo…

ASIC芯片设计全流程项目实战课重磅上线 ,支持 65nm制程流片 !

全流程项目实战课学什么? 此次推出【 ASIC芯片设计全流程项目实战课】,基于IPA图像处理加速器,以企业级真实ASIC项目为案例,学员可参与全流程项目实践,以及65nm真实流片! 众所周知,放眼整个IC硕…

【Linux】【驱动】驱动框架以及挂载驱动

【Linux】【驱动】驱动框架以及挂载驱动 绪论1.配置开发环境2. 编写驱动文件3. 编译Makefile文件4.编译5. 挂载驱动注意:有些开发板打开了或者禁止了printk信息,导致你看到的实验现象可能不一样,此时已经将文件移动到了开发板中,开发板查看文…

Flink CEP(Complex Event Processing)库

复杂事件处理(Complex Event Processing,CEP)是一种用于在流式数据中识别和处理复杂事件模式的技术。Apache Flink 作为一个流式处理框架,也可以用于实现复杂事件处理。下面是 Flink 中实现复杂事件处理的一般原理: 事…

WebRTC音视频通话-新增或修改SDP中的码率Bitrate限制

WebRTC音视频通话-新增或修改SDP中的码率Bitrate限制参数 之前搭建ossrs服务,可以查看:https://blog.csdn.net/gloryFlow/article/details/132257196 之前实现iOS端调用ossrs音视频通话,可以查看:https://blog.csdn.net/gloryFlo…

连接不上手机,adb devices为空:

首先说明一下,我是已经安装了android studio,也配置了环境变量,但是还是连接不上手机 解决方案: 1.打开开发者模式 https://product.pconline.com.cn/itbk/sjtx/sjwt/1424/14246015.html 2.开启usb调试 https://baiyunju.cc/10770 最后成功…

Nginx:Web基础与HTTP协议

目录 1、dns域名 1.1 dns解析方式: 1.2 域名解析服务器: 2、html 2.1 网页、网站和主页、域名 2.2 URL和URI 3、Web(全球广域网,也称万维网) 3.1 静态页面 3.1.1 静态页面特点 3.2 动态页面 3.2.1 动态页面…

什么是CSS的box-sizing属性?它有哪些取值,各有什么不同?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ CSS的box-sizing属性⭐ 取值⭐ 不同之处⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对Web…

关于Vue构建低代码平台的思考

一、前言 在项目实战开发中,尤其是大平台系统的搭建,针对不同业务场景,需要为用户多次编写用于录入、修改、展示操作的相应表单页面。一旦表单需求过多,对于开发人员来说,算是一种重复开发,甚至是繁杂的工作…

【C++起飞之路】初级—— auto、范围for循环、宏函数和内联函数

auto、范围for、内联函数、宏函数和nullptr 一、auto — 类型推导的魔法(C 11)1、auto 是什么?2、工作原理3、优势4、限制和注意事项 二、范围for (C11)1、基本语法2、优势3、工作原理4、注意事项5、C11: 范围 for 循环的扩展: 三…

软件测试基础篇——LAMP环境搭建

LAMP 1、Linux系统的其他命令 find命令:在目录下查找文件 ​ 格式一:find 路径 参数 文件名 ​ 路径:如果没有指定路径,默认是在当前目录下 ​ 参数:-name 根据文件名来查找,区分大小写; -…

useState() 的使用及场景

useState是 React提供的一个Hook函数,用于在函数组件中添加和管理状态。它允许你在函数组件中定义一个可变的状态,并在组件的生命周期中对状态进行更新和访问。 使用useState可以避免使用类组件时需要定义和管理繁琐的constructor,state和se…

HOT83-打家劫舍

leetcode原题链接:打家劫舍 题目描述 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系…

适配器模式(C++)

定义 将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 应用场景 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象 ”放在新的环境中应用,但是新环境要求…

【Golang】一文学完 Golang 基本语法

Golang 下载 安装包链接:https://share.weiyun.com/InsZoHHu IDE 下载:https://www.jetbrains.com/go/ 第一个 golang 程序 package mainimport "fmt"func main() {fmt.Println("hello golang") }每个可执行代码都必须包含 Pack…

Flutter 状态管理 Provider

状态管理必要性 Flutter基于声明式构建UI,原生则是命令式,状态管理是用于解决声明式开发带来的问题。 例:命令式的原生,数据更新需要拿到对应控件并更改其显示值;而声明式则需要更改数据值并通过setstate更新状态&am…