爬虫篇-小程序后台数据获取【附源码】


前言

  鉴于网上以及视频教材很多都是直接用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,这里先做保留,请求成功后的截图如下:
在这里插入图片描述


总结

以上为爬虫模拟登陆的基本思路,后续还有js逆向爬虫案例。
源码:模拟登录源码

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱学习的广东仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值