Python爬虫之requests__cookies登录古诗文网

这个案例对于爬虫小白来说还有一定的难度,但是一步一步分析下来还是有规律可循的。
第一步:需要安装requests模块
pip install requests
第二步:分析我们需要怎么做以及难点有哪些,具体分析过程如下。
#通过登录 进入到主界面
#通过找登录接口 发现需要的参数很多
#__VIEWSTATE: QQ5Z3DwsE3kuIGVtLjKA/NXKm0SZ3Xlp8SDCTnBbCgz6gGC159xhDaPuqjjWQ3vaHKLY1zgNv3Eocl3PfzRmqUnaiRn92XXO76D6FRqNgacEOihFmdKJHzJbgHv9q1yvHHEdznOEKZnwHulpalXFiFonP4Y=
#__VIEWSTATEGENERATOR: C93BE1AE
#from: http://so.gushiwen.cn/user/collect.aspx?type=m
#email: 账号
#pwd:密码
#code: 验证码
#denglu: 登录
#观察看出:__VIEWSTATE、__VIEWSTATEGENERATOR、code是变量

#难点:(1)__VIEWSTATE、__VIEWSTATEGENERATOR.一般情况下看不到的数据都在页面源码中 # 通过查看页面源码,发现这两个变量都可以在页面源码中找到,所以我们需要获取页面源码,进行解析得到这俩变量。 # (2)验证码

import requests
#登录页面网址
url = 'https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx?type=m'

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 Edg/120.0.0.0'
}
#获取网页源码
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
viewstategemretor = soup.select('#__VIEWSTATEGENERATOR')[0].attrs.get('value')

#获取验证码图片
code = soup.select('#imgCode')[0].attrs.get('src')
code_url = 'https://so.gushiwen.cn' + code
#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': 'viewstategemretor',
    '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)
做案例时需要将账号密码改成自己的。此案例需要手动识别验证码,可以借助其他手段对验证码图片进行自动验证。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值