爬虫学习笔记-Cookie登录古诗文网

 1.导包请求

import requests

2.获取古诗文网登录接口 

url = 'https://so.gushiwen.cn/user/login.aspxfrom=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/120.0.0.0 Safari/537.36',
}

 3.发送请求,获取登录页面源码

response = requests.get(url=url, headers=headers)
content = response.text

 4.导包获取页面元素

from lxml import etree

 5.使用xpath获取隐藏域值和验证码

tree = etree.HTML(content)
viewstate = tree.xpath('//input[@id="__VIEWSTATE"]/@value')[0]
viewgenerator = tree.xpath('//input[@id="__VIEWSTATEGENERATOR"]/@value')[0]
#验证码
code = tree.xpath('//img[@id="imgCode"]/@src')[0]

 5.将获取验证码的地址拼接成完整的网址

code_url = 'https://so.gushiwen.cn' + code

 6.建立会话,请求验证码

session = requests.session()
response_code = session.get(code_url)
content_code = response_code.content

 7.保存验证码图片

with open('code.jpg','wb') as fp:fp.write(content_code)

 8.用于人工查看验证码后手动输入

code_name = input('输入验证码')

 9.将获取的隐藏域数据和验证码拼接到post请求的data中

post_url = 'https://so.gushiwen.cn/user/login.aspx?from=http%3a%2f%2fso.gushiwen.cn%2fuser%2fcollect.aspx'post_data = {'__VIEWSTATE': viewstate,'__VIEWSTATEGENERATOR': viewgenerator,'from: http': '//so.gushiwen.cn/user/collect.aspx','email': '123',#使用自己的账号名和密码'pwd': '123','code': code_name,'denglu': '登录',
}

10.发送请求

response_post = session.post(url=post_url,data=post_data,headers=headers)

 11.接收响应内容

content_post = response_post.text

 12.将响应的内容保存为html格式,手动打开,跳过验证码登录

with open('gushiwen.html','w',encoding='utf-8') as fp:fp.write(content_post)

 13.将保存的html文件使用浏览器打开

 14.源码

# 导包请求
import requests
# 获取古诗文网登录接口
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/120.0.0.0 Safari/537.36',
}
# 发送请求,获取登录页面源码
response = requests.get(url=url, headers=headers)
content = response.text
print(content)
# 导包获取页面元素
from lxml import etreetree = etree.HTML(content)
# 获取隐藏域值
viewstate = tree.xpath('//input[@id="__VIEWSTATE"]/@value')[0]
print(viewstate)
viewgenerator = tree.xpath('//input[@id="__VIEWSTATEGENERATOR"]/@value')[0]
print(viewgenerator)
# 获取验证码地址
code = tree.xpath('//img[@id="imgCode"]/@src')[0]
print(code)
# 将获取验证码的地址拼接成完整的网址
code_url = 'https://so.gushiwen.cn' + code
print(code_url)
# 建立会话
session = requests.session()
# 会话请求验证码
response_code = session.get(code_url)
content_code = response_code.content
# 保存验证码
with open('code.jpg','wb') as fp:fp.write(content_code)
# 用于人工查看验证码后手动输入
code_name = input('输入验证码')
post_url = 'https://so.gushiwen.cn/user/login.aspx?from=http%3a%2f%2fso.gushiwen.cn%2fuser%2fcollect.aspx'
# 将获取的隐藏域数据和验证码拼接到post请求的data中
post_data = {'__VIEWSTATE': viewstate,'__VIEWSTATEGENERATOR': viewgenerator,'from: http': '//so.gushiwen.cn/user/collect.aspx','email': '123', #使用自己的账号名和密码'pwd': '123','code': code_name,'denglu': '登录',
}
# 发送请求
response_post = session.post(url=post_url,data=post_data,headers=headers)
# 接收响应内容
content_post = response_post.text
# 将响应的内容保存为html格式,手动打开,跳过验证码登录
with open('gushiwen.html','w',encoding='utf-8') as fp:fp.write(content_post)

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

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

相关文章

kylin启动memcached缓存

当部署kylin的机器内存不足时,可以使用memcached作为kylin的查询缓存。 需要在kylin.properties添加的配置如下: kylin.query.cache-enabledtrue kylin.query.lazy-query-enabledtrue kylin.query.cache-signature-enabledtrue kylin.query.segment-ca…

linux解决访问/下载github连接超时或下载慢的问题

问题 我这里是树莓派从github下载资源出现无法连接,连接超时的问题,如下所示解决方式 修改/etc/hosts文件 例: sudo nano /etc/hosts #添加如下 192.30.255.112 github.com git 185.31.16.184 github.global.ssl.fastly.net这里以树莓派为…

【大厂AI课学习笔记】1.3 人工智能产业发展(4)——泛在的人工智能

人工智能走向泛在。 泛在,就是广泛存在。(下图来自腾讯AI课。) 没办法,被百度抛弃了,想学习,课程打不开,只好投想腾讯的怀抱。 之前考过腾讯云的认证,课程做的还是条理很清晰。 主…

全面掌握Django的web框架Django Rest_Framework(一)

文章目录 Django Rest_Framework1. DRF介绍2.DRF特点3.环境安装与配置(1)DRF需要以下依赖(2)创建django项目 4.序列化器的使用(1)创建序列化器 5. 反序列化器使用 Django Rest_Framework 1. DRF介绍 Djan…

PPT、PDF全文档翻译相关产品调研笔记

主要找一下是否有比较给力的全文档翻译 文章目录 1 百度翻译2 小牛翻译3 腾讯交互翻译4 DeepL5 languagex6 云译科技7 快翻:qtrans8 simplifyai9 officetranslator10 火山引擎翻译-无文档翻译1 百度翻译 地址: https://fanyi.baidu.com/ 配套的比较完善,对于不同行业也有区…

中移(苏州)软件技术有限公司面试问题与解答(7)—— kmalloc与vmalloc的区别与联系及使用场景

接前一篇文章:中移(苏州)软件技术有限公司面试问题与解答(0)—— 面试感悟与问题记录 本文参考以下文章: kmalloc与vmalloc如何选择 Vmalloc与kmalloc的区别 特此致谢! 本文对于中移&#xf…

docker安装elasticsearch+kibana

目录 1.安装es 2.安装kibana 3.kibana监控es 1.安装es 拉取镜像 docker pull elasticsearch:7.6.1 创建存放配置文件、数据、插件的各个文件夹 mkdir -p /home/docker/elasticsearch/config mkdir -p /home/docker/elasticsearch/data mkdir -p /home/docker/elasticsearch…

防火墙目标NAT

目录 拓扑需求 目标NAT配置配置配置服务器映射电信(DX)移动(YD) 配置NAT策略配置目的端口转换 新建安全策略 测试 拓扑 需求 分公司设备可以通过总公司的移动链路和电信链路访问到DMZ区的http服务器 目标NAT配置 这里主要配置目标…

FFMPEG 之 DXVA2 硬解

一:FFMPEG 支持的硬解方式有很多: DXVA2、D3D11VA、CUDA、QSV、OPENCL、DRM、VAAPI、VDPAU、VIDEOTOOLBOX、MEDIACODEC。 有的支持 Windows 平台,有的支持 linux 平台,有的支持 apple ios 平台,…

IP路由基础

什么是路由转发 网关或者路由器根据收到的IP报文其目的地址选择一条合适的路径,并将报文转发到下一个路由器。在路径中的最后一跳路由器二层寻址报文转发给目的主机。 路由中包含的有哪些信息 目的网络掩码出接口下一跳 路由表发现路由的获取方式 直连路由&…

react经验10:与jquery配合使用

应用场景 老web项目进行react改造,为了节省时间,部分jquery组件仍然保留。 案例1 使用bootstrapTable组件。 node_modules准备 jquery、bootstrap、bootstrap-table 如果需要typescript,则额外追加 types/bootstrap、types/jquery 以上都…

《zdppy_aocrud官方教程》 08 自动生成根据ID列表删除接口

08 自动生成根据ID列表删除接口 《zdppy_aocrud官方教程》 08 自动生成根据ID列表删除接口 生成方法 服务端 import aocrud import env import orm from api import Api, respenv.load("../.env")db, BaseModel orm.get_mysql_pool_base_model_by_env()class Us…

上班族学习方法系列文章目录

上班族学习方法系列文章目录 文章目录 上班族学习方法系列文章目录前言一、时间管理二、答题实战 前言 上班族如果想提高自己,那么就得掌握有效的学习方法和良好的时间管理。 一、时间管理 上班族有家有业,考证或者提高学历备考时间不充分。需要学会精…

Mybatis 源码系列:领略设计模式在 Mybatis 其中的应用

文章目录 一、Builder模式二、工厂模式三、单例模式四、代理模式五、组合模式六、模板方式模式七、适配器模式八、装饰器模式九、迭代器模式 虽然我们都知道有23种设计模式,但是大多停留在概念层面,真实开发中很少遇到,Mybatis源码中使用了大…

LeetCode 第22天

235. 二叉搜索树的最近公共祖先 普通二叉树的最近公共祖先方法通用,但是涉及到二叉排序树的特性,就需要记得遍历得到的最近的一个值在p q值之间的结点,这个就是目标的公共祖先结点。这题算是写的比较透的了,用了三种方法。 class…

Flink 集成和使用 Hive Metastore

1. AWS EMR 的 Flink 使用 Hive Metastore 想在 Flink 中使用 Hive Metastore 其实只需要将 Flink Hive Connector 以及 Hive Metastore 有关的 Jar 包部署到 ${FLINK_HOME}/lib 下即可,稍后我们会介绍一下具体做法。但是,如果是 AWS EMR,会有…

代码随想录算法训练营DAY8 | 字符串(1)

一、LeetCode 344 反转字符串 题目链接&#xff1a; 344.反转字符串https://leetcode.cn/problems/reverse-string/ 思路&#xff1a;双指针法交换。 class Solution {public void reverseString(char[] s) {int n s.length;int left 0, right n-1;while(left < right){c…

单元/集成测试服务

服务概述 单元/集成测试旨在证明被测软件实现其单元/架构设计规范、证明被测软件不包含非预期功能。经纬恒润测试团队拥有丰富的研发经验、严格的流程管控&#xff0c;依据ISO26262/ASPICE等开展符合要求的单元测试/集成测试工作。 在ISO 26262 - part6 部分产品开发&#xff…

2024 高级前端面试题之 Node 「精选篇」

该内容主要整理关于 Node 模块的相关面试题&#xff0c;其他内容面试题请移步至 「最新最全的前端面试题集锦」 查看。 Node模块精选篇 1. package.json版本号规则2. package.json 与 package-lock.json 的关3. npm 模块安装机制4. 模块化的差异 AMD CMD COMMONJS ESMODUL5. No…

vue3:中warch监听的几种写法

作用&#xff1a;监视数据的变化&#xff08;和vue2中的watch作用一致&#xff09; 特点&#xff1a;vue3中watch只能监视以下四种数据&#xff1a; 1、ref 定义的数据 2、reactive定义的数据 3、函数返回的值&#xff08;getter函数&#xff09; 4、前面3个内容的数组 写…