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

news/2024/7/19 12:31:59 标签: 爬虫, 学习, 笔记

 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 etree

tree = 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.niftyadmin.cn/n/5360912.html

相关文章

计算机网络(第六版)复习提纲24

3 传输控制协议TCP概述 A TCP最主要的特点 1 面向连接的传输层协议 2 每一条TCP连接只能有两个端点,且只能是点对点的 3 提供可靠交付的服务(无差错、不丢失、不重复、不乱序) 4 全双工通信,两端设有发送缓存和接收缓存 5 面向字节…

使用gcc/g++查看C语言预处理,编译,汇编,连接,以及动静态库的区分

文章目录 使用gcc/ggcc如何完成编译后生成可执行文件?预处理(进行宏替换)编译(生成汇编)汇编(生成机器可识别代码)连接(生成可执行文件或库文件)最后记忆小技巧 在这里涉及到一个重要的概念&…

文件和文件夹相关命令

创建文件创建文件夹删除文件和文件夹拷贝文件和文件夹移动文件和文件夹创建文件:touch 用户可以通过touch来创建一个空的文件,demo如下: touch hello.txt 说明: 则会在当前路径下创建名字为hello.txt的空文件Linux系统中没有严格的后缀(格式),所以创建文件时可以命名…

【算法与数据结构】300、674、LeetCode最长递增子序列 最长连续递增序列

文章目录 一、300、最长递增子序列二、674、最长连续递增序列三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、300、最长递增子序列 思路分析: 第一步,动态数组的含义。 d p [ i ] dp[i] dp[i…

【每日一题】石子游戏 VI

文章目录 Tag题目来源解题思路方法一:贪心排序 写在最后 Tag 【贪心排序】【数组】【2024-02-02】 题目来源 1686. 石子游戏 VI 解题思路 方法一:贪心排序 思路 假设有两个石子 i 和 j,Alice 和 Bob 认为它们的价值分别为 a i a_i ai​…

springboot 整合 AOP切面编程

文章目录 什么是AOP切面编程AOP中重要概念切面连接点通知切入点 springboot的切面编程的步骤引入切面编程依赖开发附加操作(在springboot项目新建config配置) 什么是AOP切面编程 所谓AOP就是一种编程范例,我们一般做一个项目,会分为很多个模块&#xff…

2024牛客寒假算法基础集训营1

H:01背包,但是bit 这题一看数据范围很大,重量和价值都是1e8级别的,当时还在想是不是背包,原来就是位运算 具体来说,我们枚举m的每一位为1的1,强制这一位为0,这样m被分为前后两部分…

幻兽帕鲁社区服务器搭建架设开服教程(LINUX)

幻兽帕鲁社区服务器搭建架设开服教程(LINUX) 大家好我是艾西,上一期我给大家分享了windows系统版本的幻兽帕鲁服务器搭建教程。因为幻兽帕鲁这游戏对于服务器的配置有一定的要求很多小伙伴就思考用linux系统搭建的话占用会不会小一点&#x…