python爬虫爬取APP并封装成API接口调用,使用flask-restful
#环境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相关推荐
- Python爬虫-爬取快看漫画网图片并拼接成漫画长图
Python爬虫-爬取快看漫画网图片并拼接成漫画长图 1.爬取图片 2.拼接图片 1.爬取图片 import os import requests from bs4 import BeautifulS ...
- python爬虫爬取wallpapers最新壁纸
python爬虫爬取wallpapers最新壁纸 详细教程请访问:https://www.bilibili.com/video/av58978561/ 详细教程请访问:https://www.bili ...
- python爬虫数据分析可以做什么-python爬虫爬取的数据可以做什么
在Python中连接到多播服务器问题,怎么解决你把redirect关闭就可以了.在send时,加上参数allow_redirects=False 通常每个浏览器都会设置redirect的次数.如果re ...
- python爬虫爬取csdn博客专家所有博客内容
python爬虫爬取csdn博客专家所有博客内容: 全部过程采取自动识别与抓取,抓取结果是将一个博主的所有 文章存放在以其名字命名的文件内,代码如下 #coding:utf-8import urlli ...
- 使用Python爬虫爬取网络美女图片
代码地址如下: http://www.demodashi.com/demo/13500.html 准备工作 安装python3.6 略 安装requests库(用于请求静态页面) pip instal ...
- Python爬虫|爬取喜马拉雅音频
"GOOD Python爬虫|爬取喜马拉雅音频 喜马拉雅是知名的专业的音频分享平台,用户规模突破4.8亿,汇集了有声小说,有声读物,儿童睡前故事,相声小品等数亿条音频,成为国内发展最快.规模 ...
- Python爬虫爬取微信朋友圈的方法,感兴趣的朋友可以了解下
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 小雨 | 作者 python教程 | 来源 接下来,我们将实现微信朋友圈的 ...
- 简单python爬虫爬取游戏wiki立绘
简单python爬虫爬取游戏wiki立绘 玩二次元手游是感叹美少女立绘真好看啊,可惜就是抽不到,于是看到b站wiki上有角色立绘,就写了个爬虫准备将立绘趴下来欣赏(舔). 本人爬虫的技术只算是初学,代 ...
- 【爬虫】利用Python爬虫爬取小麦苗itpub博客的所有文章的连接地址并写入Excel中(2)...
[爬虫]利用Python爬虫爬取小麦苗itpub博客的所有文章的连接地址并写入Excel中(2) 第一篇( http://blog.itpub.net/26736162/viewspace-22865 ...
最新文章
- php 如何发送json数据格式,Php如何使用curl发送json格式数据实例
- 如何得到当前application server的host name和port number
- Scylla——开源免费的优秀代理 IP 池:自动验证、JSON API、基于 React 的 Web UI、Docker 支持...
- zookeeper集群部署监控与选举同步流程等工作原理
- 小程序·云开发实战 - 校园约拍小程序
- Docker上搭建Mysql8.0服务器
- transformers PreTrainedTokenizer
- 为什么Python没有属性赋值的“with”语句?
- BGP中的联盟原理和实验(华为设备)
- Windows 10 IoT Core 17115 for Insider 版本更新
- eclipse根据wsdl文件生成webservice客户端
- PHP 设计模式之观察者模式 (转载)
- xml网站地图在线生成制作工具
- 高三计算机专业vb试题二答案,高三计算机专业VB试题(二).doc
- 原子结构示意图全部_原子结构示意图和元素及元素周期表
- presscad排样lisp_PRESSCAD统赢使用技巧(二)
- react 多行或单行文本溢出省略显示省略号(...)
- 常用 ajax js 表单 下拉加载
- 湘潭大学信息安全课作业答案7
- 29. 尚融宝借款申请
热门文章
- Matlab 类函数基本运用
- Openresty 获取今天截至的时间戳 ngx_lua 获取今天截至的时间戳
- MFC界面开发工具BCG v30.6 - 全新网格/报表控件
- easyExcel文件上传与下载
- firemonkey 点击任务栏图标不能最小化
- wpf DataGrid主从表,DataGrid嵌套DataGrid主从结构rowdetailtemplate实现,绑定DataTable数据源,使用Visual Studio 2017
- 《乡村爱情6》七月宾县开机
- window php 本地播放视频遇到的问题
- 魅族16s Pro体验:精益求精的打磨升级款
- IPhone 6 死机