python爬虫--------requests案列(二十七天)

兄弟姐们·,大家好哇!我是喔的嘛呀。今天我们一起来学习requests案列。

一、requests____cookie登录古诗文网

1、首先想要模拟登录,就必须要获取登录表单数据

登录完之后点f12,然后点击network,最上面那个就是登录接口,登录表单数据就在里面

点登录接口,然后在点击payload可以看到有一个form data,里面的数据就是登录表单数据,爬虫模拟登陆就是构造表单数据实现登录。一定要合法合规。(因为涉及自己的账号密码我就不点开了)

里面的数据就是这些

'__VIEWSTATE': viewstate,
'__VIEWSTATEGENERATOR': viewstategenerator,
'from': '<http://so.gushiwen.cn/user/collect.aspx>',
'email': 'your_email@example.com',
'pwd': 'your_password',
'code': code_name,
'denglu': '登录',

很多小伙伴不知道'__VIEWSTATE'、'__VIEWSTATEGENERATOR'这两个参数是什么意思,给大家说一哈。

在很多Web页面中,特别是使用ASP.NET开发的页面中,会使用隐藏域(hidden input)来存储一些页面状态或者其他信息,这些信息对于页面的正常操作很重要,但用户是看不到的。

在这个例子中,**__VIEWSTATE__VIEWSTATEGENERATOR**是两个隐藏域,它们存储了关于页面状态的信息,而且在每次请求页面时都会动态生成和改变。所以,在登录的时候,我们需要获取这两个隐藏域的值,并将它们包含在POST请求的数据中,以确保我们的请求是有效的。

2、第二个主要的地方时我们登录时候需要输入验证码,我们需要拿到正确的验证码地址并把验证码图片爬取下来

img 的id为imgCode 然后我们就可以使用BeautifulSoup解析

3、根据分析写出代码

(1)导入**requestsBeautifulSoup**库。

import requests
from bs4 import BeautifulSoup

(2)定义登录页面的URL和请求头部信息,模拟浏览器请求。

pythonCopy code
login_url = '<https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx>'headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
}

(3)创建会话对象**session**,用于保持会话状态。

session = requests.session()

(4)发送GET请求获取登录页面的HTML源码,将响应内容保存在**content**变量中。

response = session.get(url=login_url, headers=headers)
content = response.text

(5)使用BeautifulSoup解析HTML源码,获取隐藏域**__VIEWSTATE__VIEWSTATEGENERATOR**的值,以及验证码图片的URL。

soup = BeautifulSoup(content, 'lxml')
viewstate = soup.select_one('#__VIEWSTATE')['value']
viewstategenerator = soup.select_one('#__VIEWSTATEGENERATOR')['value']
code_url = '<https://so.gushiwen.cn>' + soup.select_one('#imgCode')['src']

(6)拼接验证码图片的完整URL,并发送GET请求获取验证码图片的内容,将内容保存到本地文件**code.jpg**中。


response_code = session.get(code_url)
with open('code.jpg', 'wb') as fp:fp.write(response_code.content)

(7)用户手动输入验证码。


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

(8)构造登录表单数据,包括**__VIEWSTATE__VIEWSTATEGENERATORfromemailpwdcodedenglu**字段。


data_post = {'__VIEWSTATE': viewstate,'__VIEWSTATEGENERATOR': viewstategenerator,'from': '<http://so.gushiwen.cn/user/collect.aspx>','email': 'your_email@example.com','pwd': 'your_password','code': code_name,'denglu': '登录',
}

(9)发送POST请求登录,将响应内容保存在**content_post**变量中。

response_post = session.post(url=login_url, headers=headers, data=data_post)
content_post = response_post.text

(10)将登录后的响应内容保存到本地HTML文件**gushiwen.html**中。

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

(11)完整代码

import requests
from bs4 import BeautifulSoup# 登录页面的URL
login_url = '<https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx>'# 请求头部信息,模拟浏览器请求
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36'
}# 创建会话对象,保持会话状态
session = requests.session()# 发送GET请求获取登录页面的HTML源码
response = session.get(url=login_url, headers=headers)
content = response.text# 使用BeautifulSoup解析HTML源码,获取隐藏域__VIEWSTATE和__VIEWSTATEGENERATOR的值,以及验证码图片的URL
soup = BeautifulSoup(content, 'lxml')
viewstate = soup.select('#__VIEWSTATE')[0].attrs.get('value')
viewstategenerator = soup.select('#__VIEWSTATEGENERATOR')[0].attrs.get('value')
code = soup.select('#imgCode')[0].attrs.get('src')
code_url = '<https://so.gushiwen.cn>' + code# 获取验证码图片,并保存到本地
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('请输入验证码')# 构造登录表单数据data_post = {'__VIEWSTATE': viewstate,'__VIEWSTATEGENERATOR': viewstategenerator,'from': '<http://so.gushiwen.cn/user/collect.aspx>','email': 'your_email@example.com','pwd': 'your_password','code': code_name,'denglu': '登录',
}# 发送POST请求登录
response_post = session.post(url=login_url, headers=headers, data=data_post)
content_post = response_post.text# 将登录后的响应内容保存到本地HTML文件中
with open('gushiwen.html', 'w', encoding='utf-8') as fp:fp.write(content_post)

这段代码实现了模拟登录古诗文网站的功能,并将登录后的响应保存到本地文件中。请注意,其中的邮箱和密码等敏感信息应当替换为真实的信息,并且在实际使用时,需要遵守网站的相关规定和法律法规。

4、结果展示

运行之后找到code.jpg输入验证码

找到爬取下来的gushiwen.html点上面的浏览器标识

成功

失败

好了今天的学习就到这里了,希望兄弟姐妹能够天天开心,拜拜啦!

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

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

相关文章

Spring AI Summary

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl Spring AI is a project that aims to streamline the development of AI applications by providing abstractions and reusable components that can be easily integrate…

【软考---系统架构设计师】软件架构

目录 1 一、软件架构的概念 二、软件架构风格 &#xff08;1&#xff09;数据流风格​​​​​​​ &#xff08;2&#xff09;调用/返回风格 &#xff08;3&#xff09;独立构件风格 &#xff08;4&#xff09;虚拟机风格 &#xff08;5&#xff09;仓库风格 三、架构…

labview中循环停止事件的深入研究

1.错误用法 第一次值事件运行的时候空白按钮给的F值&#xff0c;第二次值事件运行的时候空白按钮给的T值&#xff0c;这时循环才真正结束。 2.正确用法之一 赋值和值改变事件从同时进行变成按顺序执行。 3.正确用法之二 值事件发生以后超时事件将T值赋值给结束条件&#xff…

Linux环境变量深度解析

文章目录 一、引言二、环境变量的基本概念1、环境变量的定义2、环境变量的作用与意义 三、环境变量的导入1、导入所需文件2、登陆时的导入 四、环境变量的设置方法1、查看环境变量的方式2、使用export命令临时设置环境变量3、修改配置文件以永久设置环境变量 五、命令行参数与环…

免费听音乐,下载音乐mp3,mp4,歌词的网站分享(2024-04-22)

亲测&#xff01;&#xff01;&#xff01; 1、音乐客 免费听和免费下载 经典老歌 - 音乐客音乐客,yinyueke.net,免费音乐,免费在线音乐播放器,免费下载音乐,音乐&#xff0c;播放器&#xff0c;下载&#xff0c;播放&#xff0c;DJ&#xff0c;免费,mp3,高音质&#xff0c;…

LinkedList和链表

1.ArrayList的缺陷 ArraryList由于底层是一段连续的空间&#xff0c;所以在ArrayList任意位置插入或者删除元素时&#xff0c;就 需要将后续元素往前或者往后搬移&#xff0c;时间复杂度为O(n)&#xff0c;效率比较低&#xff0c;因此ArrayList不适合做任意位置插入和删除比较…

pytest教程-27-分布式执行用例插件-pytest-xdist

上一小节我们学习了pytest随机执行用例插件-pytest-random-order&#xff0c;本小节我们讲解一下pytest分布式执行用例插件pytest-xdist。 前言 平常我们手工测试用例非常多时&#xff0c;比如有1千条用例&#xff0c;假设每个用例执行需要1分钟。如果一个测试人员执行需要10…

C++的初步知识——命名空间,缺省参数,重载函数

C 首先写一段代码&#xff1a; #include <stdio.h>int main() {printf("Hello world\n");return 0; }这段C语言代码在cpp文件中仍可运行。我们了解C是兼容C语言的&#xff0c;C的关键字中就包含了C语言的关键字和自身的关键字。关于关键字&#xff0c;我们简…

PTA L2-052 吉利矩阵

题目 解析 这题考的是搜索剪枝 可行性剪枝&#xff1a; 即判断当前行&#xff08;列&#xff09;是否已经超过L和剩下的格子都填最大值是否小于L&#xff0c;若是则剪枝。 当前行数大于1时&#xff0c;判断上一个填完的行是否等于L&#xff0c;若否&#xff0c;则剪枝。 当前行…

浏览器数据找回

网站上分享的文章应该都是个人的心血&#xff0c;对于一些操作问题导致心血丢失真的很奔溃&#xff0c;终于找到一个弥补的办法&#xff0c;csdn的文章谷歌浏览器亲测有效&#xff0c;理论上其他浏览器的其他网站应该也可以&#xff0c;适用以下场景 把博客编辑当成了编写新博…

MATLAB中gurobi 运行报错与调试

问题背景如下&#xff1a;刚拿到一份MATLAB的代码&#xff0c;但是电脑第一次安装gurobi&#xff0c;在运行过程中发生了报错&#xff0c;使用断点进行调试和步进调试方法&#xff0c;最终发现&#xff0c;这个问题出在了哪一步&#xff0c;然后向了人工智能和CSDN、百度寻求答…

ELK 日志分析(二)

一、ELK Kibana 部署 1.1 安装Kibana软件包 #上传软件包 kibana-5.5.1-x86_64.rpm 到/opt目录 cd /opt rpm -ivh kibana-5.5.1-x86_64.rpm 1.2 设置 Kibana 的主配置文件 vim /etc/kibana/kibana.yml --2--取消注释&#xff0c;Kiabana 服务的默认监听端口为5601 server.po…

李宏毅2022机器学习/深度学习 个人笔记(2)

本系列用于推导、记录该系列视频中本人不熟悉、或认为有价值的知识点 本篇记录第一讲&#xff08;选修&#xff09;&#xff1a;神奇宝贝分类&#xff08;续&#xff09; 讲解如何用高斯概率分布假设来推导类似于逻辑斯蒂分布的表达式 如图&#xff0c;boundary变为直线&…

JavaSE——常用API进阶二(7/8)-DateTimeFormatter、Period、Duration(常见方法、用法示例)

目录 DateTimeFormatter 主要方法 用法示例 Period 常见方法 用法示例 Duration 常见方法 用法示例 接下来继续要学习的是JDK 8之后新增的代替SimpleDateFormat的一个API——DateTimeFormatter 同样是用来格式化和解析时间的&#xff0c;与SimpleDateFormat相比较来说…

kettle从入门到精通 第五十三课 ETL之kettle MQTT/RabbitMQ consumer实战

1、上一节课我们学习了MQTT producer 生产者步骤&#xff0c;MQTT consumer消费者步骤。该步骤可以从支持MRQTT协议的中间件获取数据&#xff0c;该步骤和kafka consumer 一样可以处理实时数据交互&#xff0c;如下图所示&#xff1a; 2、双击步骤打开MQTT consumer 配置窗口&a…

ROS下机器人系统仿真及部分SLAM建图

文章目录 一、 Launch文件使用二、 参考资料三、 遇到的问题四、 效果演示五、相关代码5.1 一些简介5.2 机器人模型5.2.1 机器人底盘5.2.2 摄像头5.2.3 雷达 5.3 惯性矩阵 六、代码传送门实验结果及分析 温馨提示&#xff1a;如果有幸看到这个文章&#xff0c;不要看里面的内容…

java-单列集合List详解

一、List概述 ​​​​​​​List 接口继承自 Collection 接口。这意味着所有 List 类型的对象都是 Collection 类型的对象&#xff0c;它们共享 Collection 接口中定义的所有方法。 List集合的特点&#xff1a; 1、有序&#xff1a;存和取得元素顺序一致 2、有索引&#xf…

使用FPGA实现比较器

介绍 比较器就是通过比较输入的大小&#xff0c;然后输出给出判断。 在这个比较器中&#xff0c;有两个输入&#xff0c;三个输出。根据输出就可以判断出哪个输入值大了。 设计文件 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; entity compa…

【大语言模型LLM】-使用大语言模型搭建点餐机器人

关于作者 行业&#xff1a;人工智能训练师/LLM 学者/LLM微调乙方PM发展&#xff1a;大模型微调/增强检索RAG分享国内大模型前沿动态&#xff0c;共同成长&#xff0c;欢迎关注交流… 大语言模型LLM基础-系列文章 【大语言模型LLM】-大语言模型如何编写Prompt?【大语言模型LL…

zabbix监控华为网络设备路由器eNSP(3)

如果有没搭建zabbix的网友可以先看我上一个搭建文档&#xff0c;把监控系统搭建上https://blog.csdn.net/weixin_72819498/article/details/137751059 拓扑图&#xff1a; 绑定和服务器同地址的网卡 1.监控端配置 (1)SNMP服务安装 [rootzbx-server ~]# yum -y install net-…