使用requests登陆古诗词网

使用requests登陆古诗词网

# _*_ coding : utf-8 _*_
# @Time : 2023/2/8 16:50
# @Author : 李阶熊
# @File : 登陆古诗文网
# @Project : pythonProject


# 通过登陆 然后进入到主页面

# 通过找登陆接口我们发现  登陆的时候需要的参数很多
# __VIEWSTATE: uqM36LtLMHmQ0luwdxuoucqroaZOwCfJ1DXW4DvUOQcMEmtCpWNQXrr+SIsWbY7bYQkAt+fm066xQahnOEeWtJqAuIzGwihNaqpGib5pqTCgnnmo6xkHo8BT8GI3s6oyvKxQ8Qr/HzrYHjm3xi6iP5EITRU=
# __VIEWSTATEGENERATOR: C93BE1AE
# from: http://so.gushiwen.cn/user/collect.aspx
# email: 13469114846
# pwd: sdfdsf
# code: ISKU
# denglu: 登录

# 我们观察到_VIEWSTATE __VIEWSTATEGENERATOR  code 是一个可以变化的量

# 难点:1、_VIEWSTATE  __VIEWSTATEGENERATOR  一般情况看不到的数据  都是再页面的源码中
#       我们观察到这两个数据再页面的源码中  所以我们需要获取页面的源码  然后进行解析就可以获取了
#      2、验证码

import requests

# 这是登陆页面的url地址
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/108.0.0.0 Safari/537.36',
}

# 获取页面的源码
response = requests.get(url=url, headers=headers)
content = response.text

# 解析页面源码  然后获取 _VIEWSTATE  __VIEWSTATEGENERATOR

from bs4 import BeautifulSoup

soup = BeautifulSoup(content, 'lxml')

# 获取__VIEWSTATE
viewstate = soup.select('#__VIEWSTATE')[0].attrs.get('value')

# 获取__VIEWSTATEGENERATOR
viewstate_generator = soup.select('#__VIEWSTATEGENERATOR')[0].attrs.get('value')

#  获取验证码图片

code = soup.select('#imgCode')[0].attrs.get('src')
code_url = 'https://so.gushiwen.cn' + code

# 有坑
# import urllib.request
#
# urllib.request.urlretrieve(url=code_url, filename='code.jpg')

# requests里面有一个方法  session()  通过session的返回值就能使请求变成一个对象

session = requests.session()

# 验证码的url的内容
response_code = session.get(code_url)

content_code = response_code.content

# wb的模式就是将二进制数据写入到文件
with open('code.jpg', 'wb') as fp:
    fp.write(content_code)


# 获取验证码图片之后 下载到本地  然后观察验证码  然后在控制台输入这个验证码  就可以将这个值
code_name = input('请输入你的验证码')

# 点击登陆
url_post = 'https://so.gushiwen.cn/user/login.aspx?from=http%3a%2f%2fso.gushiwen.cn%2fuser%2fcollect.aspx'

data_post = {
    
    
    '__VIEWSTATE': viewstate,
    '__VIEWSTATEGENERATOR': viewstate_generator,
    'from': 'http://so.gushiwen.cn/user/collect.aspx',
    'email': '13469114846',
    'pwd': 'iL@11031103',
    'code': code_name,
    'denglu': '登录'
}

response_post = session.post(url=url_post, headers=headers, data=data_post)

content_post = response_post.text

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

难点

1:隐藏域

2:验证码

猜你喜欢

转载自blog.csdn.net/weixin_49177159/article/details/128940199