爬虫-requests-cookie登录古诗文网

一、前言

1、requests简介

requests是一个很实用的Python HTTP客户端库,爬虫和测试服务器响应数据时经常会用到,它是python语言的第三方的库,专门用于发送HTTP请求,使用起来比urllib更简洁也更强大。

2、requests的安装

pip install requests

 3、利用cookie登录古诗文网

难点:我们在进行登录时观察到与许多参数,我们要对参数进行分析,在分析的时候我们发现了三个变化参数分别是VIEWSTATE, VIEWSTATEFENE, CODE 。而且我们在对登录页面解析时,并不能找到VIEWSTATE, VIEWSTATEFENE,而这样的参数一般就会放在被隐藏在页面源码之中,我们需要去对页面源码解析并获取数据,这也是现在网站喜欢用的一个反扒手段。而且古诗文网的登录页面采用动态验证码来登录,我们考虑的时获取每次登录时产生的随机验证码图片,手动输入验证码来进行登录。

import requests
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/115.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=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
import urllib.request
urllib.request.urlretrieve(url=code_url,filename='code.jpg')
requests方法 session 通过session返回值使请求变为对象
session = requests.session()
response_code=session.get(code_url)
# #注意此时使用二进制数据,因为我们使用图片的下载
content_code=response_code.content
# #wb模式将二进制数据写入文件
with open('code.jpg','wb')as fp:
     fp.write(content_code)

# #获取验证码图片以后,下载到本地,然后观察验证码,观察之后,控制台输入验证码,将值给参数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,headers=headers,data=data_post)
content_post=response_post.text
with open('gushiwen.html','w',encoding='utf-8')as fp:
     fp.write(content_post)
以上代码大家只需要将自己的账号与密码输入进去就可以尝试登录了,如果需要其他的网站大家也可以尝试。


猜你喜欢

转载自blog.csdn.net/qq_52351946/article/details/132001047
今日推荐