前言
鉴于网上以及视频教材很多都是直接用cookie写到了headers中,这样验证是会过期的,我这里直接模拟浏览器请求。
内部系统小程序后台爬虫应用,因此没有账号的可以学习思路,有账号的可以考虑实战爬虫。
首先会分析整个小程序从一开始登陆页面请求分析到数据请求以及服务器相应内容做分析,确定参数形式,知道最后的获取数据。
一、分析小程序及后台
目标网址:http://travel.enn.cn/ssop/linzhi/admin/#/login
从图上可知,本次需要先模拟登陆,并且需要验证码登陆,因此,我们按下F12,进入浏览器开发者工具,选择Network板块。
然后重新刷新一下网页,这个时候我们会在开发者工具中得到后台的一些请求步骤,同时我们需要随便输入一个用户名和密码,以及随便一个验证码,我们需要查看登陆的时候前端浏览器会怎样发送数据到后台的,如图:
到这里我们需要一条一条的分析,分析哪些是需要请求的链接,哪一条是验证码的链接。
经过分析:
xxxx/login:是请求登陆的时候的网址
xxxx/captcha.jpgxxxxx:这个是验证码的网址
到这里我们基本上就可以做模拟登陆了。
二、使用步骤
1.引入库
from re import T
import sys, urllib,datetime,urllib.request,urllib.parse,time,random,uuid,json
from http import cookiejar
from PIL import Image
from bs4 import BeautifulSoup
2.用代码构建一个模拟浏览器
cookie = cookiejar.CookieJar()
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
3.设置好需要请求的网址连接
url_base='http://travel.enn.cn/ssop/linzhi/admin/#/login'
login_url='http://travel.enn.cn//ssop/api/authority-v2/sys/login'
image_url='http://travel.enn.cn//ssop/api/authority-v2//captcha.jpg?uuid='
4.分析验证码
首先我们在刚刚上边的图片中点击带captcha.jpg?的链接,这个时候会得到一些信息,如图:
从这里我们可以看到,链接uuid=后面就是一个uuid,因此我们只需要通过uuid模块获取即可,然后这里的Response Headers,这个是爬虫的时候的请求头,我们需要对他进行重构,因此整体的获取验证码的请求代码如下:
headers={
'Accept': 'image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Host': 'travel.enn.cn',
'Referer': 'http://travel.enn.cn/ssop/linzhi/admin/',
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
}
验证码整体请求代码:
uuid = str(uuid.uuid1())
request = urllib.request.Request(image_url+uuid, headers=headers)
picture = opener.open(request).read()
local = open('image.jpg', 'wb')
local.write(picture)
local.close()
这个时候本地就会有一张验证码的图片,名字为image.jpg
我们只需要打开图片人工读取验证码,输入到程序,代码如下:
image = Image.open('image.jpg')
image.show()
SecretCode = input('输入验证码:')
这里的变量SecretCode就是后面用到的验证码
5.模拟登陆
我们以同样的分析办法,分析/login的链接,如图:
这里代表在登陆的时候的请求头,我们直接代码模拟请求头,代码如下:
headers={
'Accept': 'application/json, text/plain, */*',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Content-Type': 'application/json; charset=UTF-8',
'Host': 'travel.enn.cn',
'Origin': 'http://travel.enn.cn',
'Referer': 'http://travel.enn.cn/ssop/linzhi/admin/',
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
}
这里是登陆的时候我们前端打包数据包发给服务器,服务器会根据这个数据来验证用户名和密码以及验证码,这里参数意思为:
captcha:验证码
username:用户名
password:密码
t:时间戳
uuid:这里是上边获取验证码的时候设置的uuid,这个服务器会根据uuid和captcha进行绑定验证
因此我们需要代码构建这个数据包,代码如下:
post_data_str='{"t":' + str(int(time.time()*1000)) +',"username":"' + user + '","password":"' + passwd +'","uuid":"' + uuid + '","captcha":"' + SecretCode + '"}'
这里的user和password需要事先设置,因为账号隐私问题不公开。
这里是我们代码请求把上边的信息打包给服务器后返回的数据,这里直接是请求代码,代码如下:
data = post_data_str.encode(encoding='utf-8')
request = urllib.request.Request(login_url,data=data,headers=headers)
login_result = opener.open(request).read().decode('utf-8')
login_jsonresult = json.loads(login_result)
if login_jsonresult['code'] == '0':
print('登陆失败:',login_jsonresult['message'])
else:
print('登陆成功')
token = login_jsonresult['token']
注意这里的token是后面所有的数据爬虫所需要的token,这里先做保留,请求成功后的截图如下:
文章来源:https://www.toymoban.com/news/detail-493380.html
总结
以上为爬虫模拟登陆的基本思路,后续还有js逆向爬虫案例。
源码:模拟登录源码文章来源地址https://www.toymoban.com/news/detail-493380.html
到了这里,关于爬虫篇-小程序后台数据获取【附源码】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!