爬虫笔记(一):实战登录古诗文网站

需求:登录古诗文网站,账号+密码+图形验证码

第一:自己注册一个账号+密码哈
第二:图形验证码,需要一个打码平台(充钱,超能力power!)或者tesseract开源包,这两个用于自动识别图形验证码哈~
我用的是超级鹰,充了1块,有1000积分,一次10积分,初学者福音hhhhh
在这里插入图片描述
在软件ID随便填一下软件名称和说明,获取软件key
然后点击首页,首页的菜单栏处有个开发文档,来到这个页面,然后找到python的Demo,get一个压缩包~
在这里插入图片描述
压缩包里有一个chaojiying.py,把它复制到自己的项目里~
在这里插入图片描述
第三:开始码

1. 调用chaojiying.py

Chaojiying_Client中的三个参数替换成自己的即可,其中filePath是后续保存下来的验证码图片的路径~

from chaojiying import Chaojiying_Clientdef getCode(filePath):c = Chaojiying_Client('超级鹰的账号', '超级鹰的密码', '软件Key')im = open(filePath, 'rb').read()return c.PostPic(im, 1902)['pic_str']
2. 获取验证码(还没到登录那一步哈)
headers = {'User-Agent': 'xxx'
}
url = 'https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx'
# 发送请求
page_text = requests.get(url=url, headers=headers).text
# 获取页面源码
page_tree = etree.HTML(page_text)
# 获取验证码路径及验证码本体
# 通过page_tree.xpath('//*[@id="imgCode"]/@src')[0]可以获取验证码<img>标签中的src属性,即验证码的路径
# 但验证码真实路径如下~
img_src = "https://so.gushiwen.cn" + page_tree.xpath('//*[@id="imgCode"]/@src')[0]
img_data = session.get(url=img_src, headers=headers).content
# 将验证码保存至同级code.jpg
with open('./code.jpg', 'wb') as f:f.write(img_data)
# 调用超级鹰,获取code
code = getCode('./code.jpg')

在浏览器按下F12,可以看到页面的源码信息,找到验证码对应的盒子,可以看到其src属性。<img>标签右键,copy->copy xpath即可得到验证码路径,拼接在官网地址后就是代码中的img_src
至于xpath是啥,其实还没有学到那里,当当好在学习xpath的时候突然想打通一套登录流程,但大概理解xpath就是可以动态获取某个标签或元素属性的东西叭(超小声)
在这里插入图片描述

3. 实战登录

在官网登录之后,打开开发者工具f12,找到如图所示的Payload,这就是访问登陆后的页面时的请求参数,共7个,其中只有__VIEWSTATE__VIEWSTATEGENERATORcode动态变化的(碎碎念,一开始不知道__VIEWSTATE__VIEWSTATEGENERATOR是啥,导致发送请求,一直提示错误,大哭出声)
在这里插入图片描述
现在code已经有了,那__VIEWSTATE__VIEWSTATEGENERATOR咋获取嘞
老规矩,获取这两玩应的xpath路径
还是,在源代码中找到这两,然后右键copy->copy xpath
在这里插入图片描述
完整代码如下:

import re, os
import requests
from lxml import etreefrom chaojiying import Chaojiying_Clientdef getCode(filePath):c = Chaojiying_Client('超级鹰的账号', '超级鹰的密码', '软件Key')im = open(filePath, 'rb').read()return c.PostPic(im, 1902)['pic_str']"""获取验证码
"""
if __name__ == "__main__":session = requests.Session()headers = {'User-Agent': 'xxx'}url = 'https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx'# 先获取验证码page_text = requests.get(url=url, headers=headers).textpage_tree = etree.HTML(page_text)# 获取__VIEWSTATE和__VIEWSTATEGENERATORviewstate = page_tree.xpath('//*[@id="__VIEWSTATE"]')[0]viewagent = page_tree.xpath('//*[@id="__VIEWSTATEGENERATOR"]')[0]img_src = "https://so.gushiwen.cn" + page_tree.xpath('//*[@id="imgCode"]/@src')[0]img_data = session.get(url=img_src, headers=headers).contentwith open('./code.jpg', 'wb') as f:f.write(img_data)# f.close()code = getCode('./code.jpg')print(code)# os.remove('code.jpg')params = {'__VIEWSTATE': viewstate,'__VIEWSTATEGENERATOR': viewagent,'from': 'http://so.gushiwen.cn/user/collect.aspx','email': 'xxx','pwd': 'xxx','code': code,'denglu': '登录'}page_text = session.post(url=url, data=params, headers=headers).textwith open('./gushi.html', 'w', encoding='utf-8') as f:f.write(page_text)

总结:生活越来越有判头了nie

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/635765.shtml

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

相关文章

TBOX与TSP之间的工作协同简介

T-Box&#xff08;Telematics Box&#xff09;是车辆智能网联系统中的重要组成部分&#xff0c;主要用于采集车辆数据并与TSP&#xff08;Telematics Service Provider&#xff0c;车联网服务提供商&#xff09;进行实时通信。以下是T-Box与TSP之间的工作内容介绍&#xff1a; …

信息登记小程序怎么做_重塑用户互动,开启全新营销篇章

信息登记小程序&#xff1a;重塑用户互动&#xff0c;开启全新营销篇章 在数字化浪潮中&#xff0c;小程序以其便捷、高效的特点&#xff0c;逐渐成为企业与用户之间沟通的桥梁。其中&#xff0c;信息登记小程序更是凭借其独特的定位&#xff0c;在众多小程序中脱颖而出。本文…

[C#]winform部署openvino调用padleocr模型

【官方框架地址】 https://github.com/PaddlePaddle/PaddleOCR 【算法介绍】 OpenVINO和PaddleOCR都是用于计算机视觉应用的工具&#xff0c;但它们有不同的特点和用途。OpenVINO是一个由Intel开发的开源工具套件&#xff0c;主要用于加速深度学习推理&#xff0c;而PaddleOC…

LNMP环境下综合部署动态网站

目录 LNMP部署--nginx 搭建mysql数据库 安装mysql的过程&#xff1a; 部署PHP&#xff1a; ​编辑​编辑php的配置文件在哪 wordpress程序安装 LNMP部署--nginx 纯净--联网状态 环境变量中没有nginx 安装形式的选择&#xff1a; yum安装&#xff1a;自动下载安装包及…

用java以数组为底层结构创建循环队列

用java以数组为底层结构创建循环队列 循环队列相对于普通队列最大的变化就是添加了一个头指针head&#xff0c;尾指针tail。原先的普通数组队列当入队列再出队列之后&#xff0c;前面就会空出位置&#xff0c;如果要再添加元素的话只能往尾部添加&#xff0c;当添加到容积大小…

Flask框架小程序后端分离开发学习笔记《4》向服务器端发送模拟请求-爬虫

Flask框架小程序后端分离开发学习笔记《4》向服务器端发送模拟请求-爬虫 Flask是使用python的后端&#xff0c;由于小程序需要后端开发&#xff0c;遂学习一下后端开发。 下面代码&#xff0c;是一个比较老的版本了&#xff0c;可以借鉴一下。 import socket import ssldef p…

贪心算法 ——硬币兑换、区间调度、

硬币兑换&#xff1a; from book&#xff1a;挑战程序设计竞赛 思路&#xff1a;优先使用大面额兑换即可 package mainimport "fmt"func main() {results : []int{}//记录每一种数额的张数A : 620B : A//备份cnts : 0 //记录至少需要多少张nums : []int{1, 5, 10, 5…

大数据质量管制规范示例

大数据质量管制规范示例 一、前提概要二、相关概念三、管理原则四、治理委员五、应用管理六、查验方式七、考核比率八、扣分标准九、责任划分十、追责范围十一、其它条例十二、总结 一、前提概要 在当今大数据信息时代&#xff0c;大数据平台&#xff08;大数据平台开发规范示…

Linux之Shell脚本编程入门

Linux之Shell脚本编程入门 文章目录 Linux之Shell脚本编程入门Shell脚本编程入门1. 脚本格式2. 第一个Shell脚本&#xff1a;hello World3.第二个 shell脚本&#xff1a;duo命令处理4. shell中变量4.1 常用系统变量4.2 自定义变量4.3 特殊字符: $n4.4 特殊变量: $#4.5 特殊变量…

Spark在降本增效中的一些思考

背景 在大环境不好的情况下,本司也开始了“降本增效”&#xff0c;本文探讨一下&#xff0c;在这种背景下 Spark怎么做的降本增效。 Yarn 基于 EMR CPU 是xlarge&#xff0c;也就是内存和核的比例在7:1左右的 &#xff0c;磁盘是基于 NVMe SSD Spark 3.5.0(也是刚由3.1 升级而…

关于大模型学习中遇到的3

来源&#xff1a;网络 Embedding模型 随着大型语言模型的发展&#xff0c;以ChatGPT为首&#xff0c;涌现了诸如ChatPDF、BingGPT、NotionAI等多种多样的应用。公众大量地将目光聚焦于生成模型的进展之快&#xff0c;却少有关注支撑许多大型语言模型应用落地的必不可少的Embed…

中仕教育:社会人员可以报名三支一扶吗?

三支一扶是针对高校应届毕业生的一种考试&#xff0c;社会人员并不满足报考条件&#xff0c;所以不能报考。 三支一扶报考条件&#xff1a; 1.应届毕业生或者毕业两年内未就业的往届毕业生。 2.专科以上学历 3.遵纪守法&#xff0c;作风良好。 不同地区的考试要求不同&…

【AJAX框架】AJAX入门与axios的使用

文章目录 前言一、AJAX是干什么的&#xff1f;二、AJAX的安装2.1 CDN引入2.2 npm安装 三、基础使用3.1 CDN方式3.2 node方式 总结 前言 在现代Web开发中&#xff0c;异步JavaScript和XML&#xff08;AJAX&#xff09;已经成为不可或缺的技术之一。AJAX使得网页能够在不刷新整个…

【C++】std::string 转换成非const类型 char* 的三种方法记录

std::string 有两个方法&#xff1a;data() 和 c_str()&#xff0c;都是返回该字符串的const char类型&#xff0c;那如何转换成非const的char呢&#xff1f; 下面展示三种方法&#xff1a; 强转&#xff1a;char* char_test (char*)test.c_str();使用string的地址&#xff…

LeetCode 热题 100 | 双指针(下)

目录 42. 接雨水 1 方法一&#xff1a;我的方法 2 方法二&#xff1a;动态规划 3 方法三&#xff1a;双指针 菜鸟做题第一周&#xff0c;语言是 C 42. 接雨水 1 方法一&#xff1a;我的方法 Warning&#xff1a;这是我的智障做法&#xff0c;请勿模仿 我只能说它教会…

17.正则表达式

正则表达式 正则表达式1.字符类2. 逻辑运算符3. 预定义字符4. 数量词5. 数据爬取6. 按要求爬取6.1 贪婪爬取6.2 非贪婪爬取 7. 字符串中使用正则表达式的方法8. 分组括号8.1 匹配和捕获分组8.2 引用和后向引用8.3 零宽断言8.4 分组嵌套与递归8.5 忽略大小写8.6 代码示例 正则表…

用Go plan9汇编实现斐波那契数列计算

斐波那契数列是一个满足递推关系的数列&#xff0c;如&#xff1a;1 1 2 3 5 8 ... 其前两项为1&#xff0c;第3项开始&#xff0c;每一项都是其前两项之和。 用Go实现一个简单的斐波那契计算逻辑 func fib(n int) int {if n 1 || n 2 {return 1}return fib(n-1) fib(n-2) …

MySQL---视图索引

表定义&#xff1a; 学生表&#xff1a;Student (Sno, Sname, Ssex , Sage, Sdept) 学号&#xff0c;姓名&#xff0c;性别&#xff0c;年龄&#xff0c;所在系 Sno为主键 课程表&#xff1a;Course (Cno, Cname,) 课程号&#xff0c;课程名 Cno为主键 学生选课表&#xff1a;S…

Redis设置开机自启动

1.新建一个系统服务文件 首先输入命令&#xff1a;vi /etc/systemd/system/redis.service 进入vim后粘贴下方代码&#xff0c;注意查看地址是否一致。 ExecStart后面接的是你的redis-server的安装位置和redis配置文件的目录 [Unit] Descriptionredis-server Afternetwork.ta…

Pycharm无法刷新远程解释器的框架: Can‘t get remote credentials for deployment server

在Pycharm上部署项目到远程服务器&#xff0c;有时候需要启动SSH会话&#xff0c;启动的时候发现没反应&#xff0c;且事件日志显示&#xff1a;无法刷新远程解释器的框架: Can’t get remote credentials for deployment server 观察pycharm界面最下边&#xff0c;发现“无默…