文章目录

  • 前言
  • 一、分析小程序及后台
  • 二、使用步骤
    • 1.引入库
    • 2.用代码构建一个模拟浏览器
    • 3.设置好需要请求的网址连接
    • 4.分析验证码
    • 5.模拟登陆
  • 总结

前言

  鉴于网上以及视频教材很多都是直接用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逆向爬虫案例。
源码:模拟登录源码

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

  1. java计算机毕业设计ssm学生课堂考勤小程序947n4(附源码、数据库)

    java计算机毕业设计ssm学生课堂考勤小程序947n4(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ ...

  2. JAVA计算机毕业设计融呗智慧金融微资讯移动平台小程序端(附源码、数据库)

    JAVA计算机毕业设计融呗智慧金融微资讯移动平台小程序端(附源码.数据库) 目运行 环境项配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ ...

  3. CRMEB全开源Java版微信小程序商城,附源码

    CRMEB-JAVA版简介 CRMEB商城JAVA版,SpringBoot + Maven + Swagger + Mybatis Plus + Redis + Uniapp +Vue 包含移动端.小 ...

  4. 微信小程序实战视频教程附源码课件与多个微信小程序源码 14课

    课程介绍: 两天微信小程序实战,结合豆瓣API开发豆瓣小程序,附带微信官方小程序开发工具win版与mac版.还有几个小程序源码可供剖析. 课程目录: 第一天 01-内容介绍 02-微信小程序开发工具的 ...

  5. 狼人杀微信小程序项目实例(附源码)

    一.项目展示 狼人杀是一款多人参与的,通过语言描述推动.较量口才和分析判断能力的策略类桌面游戏. 玩家人数适于4-18人参与 主要角色有:狼人 .预言家 .平民 .女巫 .猎人 .白痴 .守卫 .骑士 ...

  6. 微信小程序--计算器(附源码下载地址)

    一.界面 1.主要界面:基本计算 2.扩展界面:单位计算 3.其它界面 房贷计算.正则表达式等,具体可扫码试用 三.代码: 1.主界面 index.js Page({ data: { idb: &qu ...

  7. 一款基于微信的小程序电商系统源码(前端+后台)带文字安装教程

    小程序电商系统源码(前端+后台)带文字安装教程 运行环境 服务器宝塔面板 PHP 5.6 Mysql 5.5及以上版本 Linux Centos7以上 系统介绍: 1.一款基于微信的小程序电商系统,是 ...

  8. 微信小程序宠物商城项目源码来了~

    微信小程序蒙服汇项目源码来了~ 微信小程序垃圾分类项目源码来了~ 微信小程序校园社团管理系统项目源码来了~ 团队承接各类小程序定制,需要加微 code_gg_boy .小商城,购物,公司的一些管理,流 ...

  9. 新版WIFI小程序分销系统微信源码序WiFi大师版流量主搭建独立源码WiFi分销源码

    网传版本,未测试,新版WIFI大师v4.47小程序源码,WIFI分销系统带流量主和独立运行版. 更新内容: 1.后台更多板块列表新增分页 2.平台管理端图标优化 3.平台管理端新增平台统计 4.优化后 ...

最新文章

  1. GSM协议编号及其内容
  2. python是软件吗-python运行环境是什么
  3. Nand Flash基础知识与坏块管理机制的研究
  4. MongoDB警告信息
  5. 军哥12月份的成绩,只能算一般。但可能是其他机构一年通过IE的数量了(1个月27名IE诞生)...
  6. Spring配置中的classpath:与classpath*:的区别研究(转)
  7. sql alwayson群集 registerallprovidersip改为0_技术分享 | 从 MySQL 8.0 复制到 MySQL 5.7
  8. 17.基于scrapy-redis两种形式的分布式爬虫
  9. pycharm 设置环境变量
  10. 数字电路与逻辑设计——组合逻辑篇
  11. 官方发布 激情世界杯】浩海技术 GHOST XP SP3 世界杯装机特别版★用稳定压倒一切!...
  12. wedo2.0编程模块介绍_wedo2.0课程包
  13. 海外服务器配置多少带宽比较合适?
  14. swift野梦抄袭 taylor_断眉质疑Taylor Swift新歌抄袭《Next to Me》,双方粉丝掀起骂战...
  15. winrar破解注册
  16. 【Spring】IoC容器系列的设计与实现:BeanFactory和ApplicationContext
  17. 头条 上传图片大小_2021今日头条!龙华《学仕名府》规划《学仕名府》简介《学仕名府》全国上市!-龙华新区名盘导购...
  18. 垃圾回收器——CMS与G1
  19. 《沟通的方法》笔记十:激励
  20. 【可视化】对比与位置的艺术 - how we position and what we compare

热门文章

  1. HTML获取和设置标题图标
  2. 如何防止黑客恶意扫描你的计算机
  3. Unity塔防游戏的制作与实现
  4. Bootstrap统计图表后台管理模板
  5. (CSDN-霏凡) 企业管理软件
  6. DirectX11 绘制字体
  7. [算法系列]算法一 地理空间距离计算优化
  8. Android微信暗黑模式的方法,微信“暗黑”模式来了!设置方法拿走不谢
  9. 为什么不建议你内推?原来80%的内推码都无效!
  10. Bank相关4_电子现金与电子钱包的区别