爬虫----088requests_cookie登录古诗文网

#通过登录 进入到主界面

#通过找登录接口 发现需要很多的参数
# __VIEWSTATE: hydbb8BPUjaV+6uqWe5tegAJICk+Xh7D6Mt1I+gzpPZ3Ry6W/ZGIIeH/1gYGMav0Kmx1LPKMmrBxI+CBp9/ElKHYkeMCvR+f0FWqCbQpu1X0ZlpJKqC4SuCOV94gxA74GNM3cBjA4Gk3tWKDaMUTxLDXyT4=
# __VIEWSTATEGENERATOR: : C93BE1AE
# from: http://so.gushiwen.cn/user/collect.aspx
# email: 邮箱
# pwd: 密码
# code: 4d14
# denglu: 登录

#观察_VIEWSTATE   __VIEWSTATE   code是可变化的量

#难点 (1)_VIEWSTATE   __VIEWSTATE     一般情况下,看不到的数据都是在页面的源码中
#      观察到上面两个数据在页面的源码中  所以我们获取页面源码  然后进行解析就行了
#    (2)验证码  code

import requests
from bs4 import BeautifulSoup

#登陆页面的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/109.0.0.0 Safari/537.36 SLBrowser/9.0.3.1311 SLBChan/103'
}

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

#解析页面源码  然后获取 __VIEWSTATE   __VIEWSTATEGENERATOR
soup = BeautifulSoup(content,'lxml')
#获取_VIEWSTATE
viewstate = soup.select('#__VIEWSTATE')[0].attrs.get('value')
#获取__VIEWSTATEGENERATOR
viewstategenerator  = soup.select('#__VIEWSTATEGENERATOR')[0].attrs.get('value')
# print(viewstate)
# print(viewstategenerator)

#获取验证码图片
# //div[@class="mainreg2"]/img[@id="imgCode"]/@src

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

#获取了验证码的图片后 下载到本地  然后观察验证码  观察之后 然后在控制台输入这个验证码 就可以将这个值给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':viewstategenerator,
    'from: http':'//so.gushiwen.cn/user/collect.aspx',
    'email':'邮箱',
    'pwd':'密码',
    'code':code_name,
    'denglu':'登录'
}

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

content_post = response_post.text

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

【注意】隐藏域问题

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值