#环境python3.6

# 爬取APP 无忧借条

# 通过用户账号密码爬取用户个人信息(我这账号密码已打码)

爬虫部分代码

# coding:utf8
import hashlib
import time
import urllib3
import jsonheaders = {'Accept': ' */*', 'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'zh-CN,en-US;q=0.8','User-Agent': 'Mozilla/5.0 (Linux; Android 6.0.1; Redmi 3S Build/MMB29M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043632 Safari/537.36 jinjiedao'}
origin_data = {} # 原始数据
result={} #提取后数据
http = urllib3.PoolManager()  # http连接池
urllib3.disable_warnings() #禁用各种urllib3警告# 获取token
def login(phone,password):login_url='https://www.gushistory.com/jjdApi/user/login'headers['refer'] = 'https://www.gushistory.com/jjdapp/html/register/login.html?telephone=' + phonemd5 = hashlib.md5()md52 = hashlib.md5()md5.update(password.encode(encoding='utf-8')) # 第一次md5md52.update(md5.hexdigest().encode(encoding='utf-8'))  # 第二次md5# 创建登陆参数字典data={'c_telephone': phone, 'c_pwd': md52.hexdigest()}response=excute(login_url,'GET',data)origin_data['login'] = responsereturn response['token']# 获取登陆后的信息
def getAccountInfo(token):account_url='https://www.gushistory.com/jjdApi/user/getHomepageInfo'headers['refer'] = 'https://www.gushistory.com/jjdapp/html/index.html'data = {'token': token}response = excute(account_url, 'GET', data)origin_data['account'] = responseuser_info = response['userInfo']result['balance'] = user_info['n_left_amt']  # 余额result['wait_repay_amt'] = user_info['n_to_repay_amt'] # 待还金额result['wait_receive'] = user_info['n_to_receive_amt'] # 代收金额result['lender_cnt'] = response['borrowInfo']['n_lender_cnt']  # 出借金额result['phone'] = user_info['c_telephone']  # 手机号if 'c_name' in user_info:  # 名称result['name'] = user_info['c_name']else:result['name'] = '未实名'if 'c_id_card_no' in user_info:  # 身份证号result['id_card'] = user_info['c_id_card_no']return resultdef excute(url, method, data):if data == None:data = {}data['timestamp'] = int(round(time.time() * 1000))r = http.request(url=url, method=method, headers=headers, fields=data)response = json.loads(r.data.decode('utf-8'))if response['code'] == 200:return response['object']else:response['error'] = '处理失败'return responseif __name__=="__main__":phone='1516842****'pwd='123456'token = login(phone, pwd)getAccountInfo(token)

运行完结果为json数据

以上是爬虫部分,接下来先把API接口模板写好:


from flask import Flask, g
from flask_restful import reqparse, Api, Resource
from flask_httpauth import HTTPTokenAuth# Flask相关变量声明
app = Flask(__name__)
api = Api(app)# RESTfulAPI的参数解析 -- put / post参数解析
parser_put = reqparse.RequestParser()
parser_put.add_argument("user", type=str, required=True, help="need user data")
parser_put.add_argument("pwd", type=str, required=True, help="need pwd data")
#这部分是爬虫功能
def to_do(arg1, args2):return "this is info"# 操作(post / get)资源列表
class TodoList(Resource):def post(self):"""添加一个新用户: curl http://127.0.0.1:5000/users -X POST -d "name=Brown&age=20" -H "Authorization: token fejiasdfhu""""args = parser_put.parse_args()# 构建新用户user = args['user']pwd = args['pwd']info = {"info": to_do(user, pwd)}# 资源添加成功,返回201return info, 201# 设置路由,即路由地址为http://127.0.0.1:5000/users
api.add_resource(TodoList, "/users")if __name__ == "__main__":app.run(debug=True)

接下来将爬虫部分镶嵌到到模板里面,完整代码如下:

from flask import Flask, g
from flask_restful import reqparse, Api, Resource
from flask_httpauth import HTTPTokenAuth
import hashlib
import time
import urllib3
import json# Flask相关变量声明
app = Flask(__name__)
api = Api(app)# RESTfulAPI的参数解析 -- put / post参数解析
parser_put = reqparse.RequestParser()
parser_put.add_argument("user", type=str, required=True, help="need user data")
parser_put.add_argument("pwd", type=str, required=True, help="need pwd data")headers = {'Accept': ' */*', 'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'zh-CN,en-US;q=0.8','User-Agent': 'Mozilla/5.0 (Linux; Android 6.0.1; Redmi 3S Build/MMB29M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043632 Safari/537.36 jinjiedao'}
origin_data = {}  # 原始数据
result = {}  # 提取后数据
http = urllib3.PoolManager()  # http连接池
urllib3.disable_warnings()  # 禁用各种urllib3警告# 获取token
def login(phone, password):login_url = 'https://www.gushistory.com/jjdApi/user/login'headers['refer'] = 'https://www.gushistory.com/jjdapp/html/register/login.html?telephone=' + phonemd5 = hashlib.md5()md52 = hashlib.md5()md5.update(password.encode(encoding='utf-8'))  # 第一次md5md52.update(md5.hexdigest().encode(encoding='utf-8'))  # 第二次md5# 创建登陆参数字典data = {'c_telephone': phone, 'c_pwd': md52.hexdigest()}response = excute(login_url, 'GET', data)origin_data['login'] = responsereturn response['token']# 获取登陆后的信息
def getAccountInfo(token):account_url = 'https://www.gushistory.com/jjdApi/user/getHomepageInfo'headers['refer'] = 'https://www.gushistory.com/jjdapp/html/index.html'data = {'token': token}response = excute(account_url, 'GET', data)origin_data['account'] = responseuser_info = response['userInfo']result['balance'] = user_info['n_left_amt']  # 余额result['wait_repay_amt'] = user_info['n_to_repay_amt']  # 待还金额result['wait_receive'] = user_info['n_to_receive_amt']  # 代收金额result['lender_cnt'] = response['borrowInfo']['n_lender_cnt']  # 出借金额result['phone'] = user_info['c_telephone']  # 手机号if 'c_name' in user_info:  # 名称result['name'] = user_info['c_name']else:result['name'] = '未实名'if 'c_id_card_no' in user_info:  # 身份证号result['id_card'] = user_info['c_id_card_no']return resultdef excute(url, method, data):if data == None:data = {}data['timestamp'] = int(round(time.time() * 1000))r = http.request(url=url, method=method, headers=headers, fields=data)response = json.loads(r.data.decode('utf-8'))if response['code'] == 200:return response['object']else:response['error'] = '处理失败'return responsedef to_do(phone, password):token = login(phone, password)return getAccountInfo(token)# 操作(post / get)资源列表
class TodoList(Resource):def post(self):"""添加一个新用户: curl http://127.0.0.1:5000/users -X POST -d "name=Brown&age=20" -H "Authorization: token fejiasdfhu""""args = parser_put.parse_args()# 构建新用户user = args['user']pwd = args['pwd']info = {"info": to_do(user, pwd)}# 资源添加成功,返回201return info, 201# 设置路由
api.add_resource(TodoList, "/users")if __name__ == "__main__":app.run(debug=True)

这是用postman测试工具模拟浏览器请求,得出的结果

python爬虫爬取APP并封装成API接口调用,使用flask-restful相关推荐

  1. Python爬虫-爬取快看漫画网图片并拼接成漫画长图

    Python爬虫-爬取快看漫画网图片并拼接成漫画长图 1.爬取图片 2.拼接图片 1.爬取图片 import os import requests from bs4 import BeautifulS ...

  2. python爬虫爬取wallpapers最新壁纸

    python爬虫爬取wallpapers最新壁纸 详细教程请访问:https://www.bilibili.com/video/av58978561/ 详细教程请访问:https://www.bili ...

  3. python爬虫数据分析可以做什么-python爬虫爬取的数据可以做什么

    在Python中连接到多播服务器问题,怎么解决你把redirect关闭就可以了.在send时,加上参数allow_redirects=False 通常每个浏览器都会设置redirect的次数.如果re ...

  4. python爬虫爬取csdn博客专家所有博客内容

    python爬虫爬取csdn博客专家所有博客内容: 全部过程采取自动识别与抓取,抓取结果是将一个博主的所有 文章存放在以其名字命名的文件内,代码如下 #coding:utf-8import urlli ...

  5. 使用Python爬虫爬取网络美女图片

    代码地址如下: http://www.demodashi.com/demo/13500.html 准备工作 安装python3.6 略 安装requests库(用于请求静态页面) pip instal ...

  6. Python爬虫|爬取喜马拉雅音频

    "GOOD Python爬虫|爬取喜马拉雅音频 喜马拉雅是知名的专业的音频分享平台,用户规模突破4.8亿,汇集了有声小说,有声读物,儿童睡前故事,相声小品等数亿条音频,成为国内发展最快.规模 ...

  7. Python爬虫爬取微信朋友圈的方法,感兴趣的朋友可以了解下

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 小雨 | 作者 python教程 | 来源 接下来,我们将实现微信朋友圈的 ...

  8. 简单python爬虫爬取游戏wiki立绘

    简单python爬虫爬取游戏wiki立绘 玩二次元手游是感叹美少女立绘真好看啊,可惜就是抽不到,于是看到b站wiki上有角色立绘,就写了个爬虫准备将立绘趴下来欣赏(舔). 本人爬虫的技术只算是初学,代 ...

  9. 【爬虫】利用Python爬虫爬取小麦苗itpub博客的所有文章的连接地址并写入Excel中(2)...

    [爬虫]利用Python爬虫爬取小麦苗itpub博客的所有文章的连接地址并写入Excel中(2) 第一篇( http://blog.itpub.net/26736162/viewspace-22865 ...

最新文章

  1. php 如何发送json数据格式,Php如何使用curl发送json格式数据实例
  2. 如何得到当前application server的host name和port number
  3. Scylla——开源免费的优秀代理 IP 池:自动验证、JSON API、基于 React 的 Web UI、Docker 支持...
  4. zookeeper集群部署监控与选举同步流程等工作原理
  5. 小程序·云开发实战 - 校园约拍小程序
  6. Docker上搭建Mysql8.0服务器
  7. transformers PreTrainedTokenizer
  8. 为什么Python没有属性赋值的“with”语句?
  9. BGP中的联盟原理和实验(华为设备)
  10. Windows 10 IoT Core 17115 for Insider 版本更新
  11. eclipse根据wsdl文件生成webservice客户端
  12. PHP 设计模式之观察者模式 (转载)
  13. xml网站地图在线生成制作工具
  14. 高三计算机专业vb试题二答案,高三计算机专业VB试题(二).doc
  15. 原子结构示意图全部_原子结构示意图和元素及元素周期表
  16. presscad排样lisp_PRESSCAD统赢使用技巧(二)
  17. react 多行或单行文本溢出省略显示省略号(...)
  18. 常用 ajax js 表单 下拉加载
  19. 湘潭大学信息安全课作业答案7
  20. 29. 尚融宝借款申请

热门文章

  1. Matlab 类函数基本运用
  2. Openresty 获取今天截至的时间戳 ngx_lua 获取今天截至的时间戳
  3. MFC界面开发工具BCG v30.6 - 全新网格/报表控件
  4. easyExcel文件上传与下载
  5. firemonkey 点击任务栏图标不能最小化
  6. wpf DataGrid主从表,DataGrid嵌套DataGrid主从结构rowdetailtemplate实现,绑定DataTable数据源,使用Visual Studio 2017
  7. 《乡村爱情6》七月宾县开机
  8. window php 本地播放视频遇到的问题
  9. 魅族16s Pro体验:精益求精的打磨升级款
  10. IPhone 6 死机